UITextview文本不在垂直视图上垂直居中

时间:2016-10-31 03:26:49

标签: ios swift uitableview uitextview

我有一个UITextView的扩展,它将文本垂直居中放在UITextView上,我在以下SO答案中找到:https://stackoverflow.com/a/38855122/4660602

我的UITextView位于UITableViewCell中,问题是该功能似乎不适用于初始加载。它仅在我重新加载tableView或滚动时才有效。

我在cellForRowAtIndexPath内调用该方法,但我尝试将其添加到awakeFromNibprepareForReuse中的自定义单元格类,但是没有运气。想知道是否有人有任何其他建议/解决方案。

编辑:

也忘了提一下,我的VC with tableView嵌入了navigationBar和tabBar。当我切换到tabBar中的新VC然后返回时,UITextView文本错误地重新排列到顶部,即使它已经居中。

谢谢!

3 个答案:

答案 0 :(得分:1)

在视图中调整代码大小的正确位置是UIView.layoutSubviews。由于您的居中功能取决于边界,您必须在layoutSubviews中调用它,否则边界可能不正确(即它们匹配nib中的whats而不是当前设备)。您可以在cellforRowAtIndexPath中调用setNeedsLayout,告诉视图在设置文本后更新其布局。

答案 1 :(得分:0)

在iOS 10中,视图范围尚未像以前一样在viewDidLoadawakeFromNib中初始化,因此基于视图绑定的函数在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/