首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在UITextView中将文本垂直和水平居中

在UITextView中将文本垂直和水平居中
EN

Stack Overflow用户
提问于 2014-02-25 20:08:37
回答 2查看 24.7K关注 0票数 17

我有一个包含一个单元格的分组表视图。在这个单元格中,我在cellForRowAtIndexPath:中放入一个UITextView,然后立即生成第一个响应器。

我的问题是:当我开始输入时,文本是左对齐的,而不是我想要的水平和垂直居中。这是在iOS 7上。

如何使文本居中?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-25 20:13:41

我通过观察UITextView的内容大小来解决这个问题,当contentSize中有任何变化时,更新contentOffset。

按如下方式添加观察者:

代码语言:javascript
运行
复制
[textview addObserver:self forKeyPath:@"contentSize" options:(NSKeyValueObservingOptionNew) context:NULL];

按如下方式处理观察者操作:

代码语言:javascript
运行
复制
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
     UITextView *txtview = object;
     CGFloat topoffset = ([txtview bounds].size.height - [txtview contentSize].height * [txtview zoomScale])/2.0;
     topoffset = ( topoffset < 0.0 ? 0.0 : topoffset );
     txtview.contentOffset = (CGPoint){.x = 0, .y = -topoffset};
}

要使文本视图文本水平居中,请从.xib类中选择文本视图,然后转到库并在该库中将对齐方式设置为居中。

好好享受吧。:)

票数 28
EN

Stack Overflow用户

发布于 2015-04-16 09:13:10

非常好的解决方案!这是一个Swift + Interface Builder解决方案,因此您可以在IB中启用它。

我将把它作为LSwift库的一部分。

代码语言:javascript
运行
复制
extension UITextView {
    @IBInspectable var align_middle_vertical: Bool {
        get {
            return false    //  TODO
        }
        set (f) {
            self.addObserver(self, forKeyPath:"contentSize", options:.New, context:nil)
        }
    }
    override public func observeValueForKeyPath(keyPath: String, ofObject object: AnyObject, change: [NSObject:AnyObject], context: UnsafeMutablePointer<Void>) {
        if let textView = object as? UITextView {
            var y: CGFloat = (textView.bounds.size.height - textView.contentSize.height * textView.zoomScale)/2.0;
            if y < 0 {
                y = 0
            }
            textView.content_y = -y
        }
    }
}

public extension UIScrollView {
    public var content_x: CGFloat {
        set(f) {
            contentOffset.x = f
        }
        get {
            return contentOffset.x
        }
    }
    public var content_y: CGFloat {
        set(f) {
            contentOffset.y = f
        }
        get {
            return contentOffset.y
        }
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22013768

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档