我有一个UITextView的扩展,它将文本垂直居中放在UITextView上,我在以下SO答案中找到:https://stackoverflow.com/a/38855122/4660602
我的UITextView位于UITableViewCell中,问题是该功能似乎不适用于初始加载。它仅在我重新加载tableView或滚动时才有效。
我在cellForRowAtIndexPath
内调用该方法,但我尝试将其添加到awakeFromNib
和prepareForReuse
中的自定义单元格类,但是没有运气。想知道是否有人有任何其他建议/解决方案。
编辑:
也忘了提一下,我的VC with tableView嵌入了navigationBar和tabBar。当我切换到tabBar中的新VC然后返回时,UITextView文本错误地重新排列到顶部,即使它已经居中。
谢谢!
答案 0 :(得分:1)
在视图中调整代码大小的正确位置是UIView.layoutSubviews。由于您的居中功能取决于边界,您必须在layoutSubviews中调用它,否则边界可能不正确(即它们匹配nib中的whats而不是当前设备)。您可以在cellforRowAtIndexPath中调用setNeedsLayout,告诉视图在设置文本后更新其布局。
答案 1 :(得分:0)
在iOS 10中,视图范围尚未像以前一样在viewDidLoad
或awakeFromNib
中初始化,因此基于视图绑定的函数在viewDidLoad
或{{{{}}中不起作用1}}。
您应该在awakeFromNib
中使用它,或者当视图的绑定已经被初始化时。
答案 2 :(得分:0)
为我工作(快速5):
class VerticallyCenteredTextView: UITextView {
override var contentSize: CGSize {
didSet {
var topCorrection = (bounds.size.height - contentSize.height * zoomScale) / 2.0
topCorrection = max(0, topCorrection)
contentInset = UIEdgeInsets(top: topCorrection, left: 0, bottom: 0, right: 0)
}
}
}
来源-https://geek-is-stupid.github.io/2017-05-15-how-to-center-text-vertically-in-a-uitextview/