【问题标题】:UITextview text not centering vertically on initial viewUITextview 文本不在初始视图上垂直居中
【发布时间】:2016-10-31 03:26:49
【问题描述】:

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

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

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

编辑:

另外忘了提一下,我的带有 tableView 的 VC 是嵌入在一个 navigationBar 和 tabBar 中的。当我在 tabBar 中切换到新的 VC 然后返回时,UITextView 文本会错误地重新对齐到顶部,即使它已经居中。

谢谢!

【问题讨论】:

    标签: ios swift uitableview uitextview


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      在 iOS 10 中,视图边界没有像以前那样在 viewDidLoadawakeFromNib 中初始化,因此基于视图边界的函数在 viewDidLoadawakeFromNib 中不起作用。 你应该在viewDidAppear 中使用它,或者当视图的绑定已经被初始化时。

      【讨论】:

        【解决方案3】:

        为我工作(Swift 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/

        【讨论】:

          猜你喜欢
          • 2012-09-17
          • 2013-06-06
          • 1970-01-01
          • 2012-03-12
          • 2016-07-28
          • 1970-01-01
          • 2013-10-15
          • 2012-07-18
          • 2020-05-10
          相关资源
          最近更新 更多