Autolayout - 使超级视图高度等于子视图高度+常量,其中子视图是 textView

Posted

技术标签:

【中文标题】Autolayout - 使超级视图高度等于子视图高度+常量,其中子视图是 textView【英文标题】:Autolayout - Make superview height equal to subview height + constant where subview is textView 【发布时间】:2016-05-03 06:28:16 【问题描述】:

我有一个UIView,在UIView 里面我有一个UITextViewUITextView 不滚动,而是使用以下代码行将 programmatically 设置为全高:

self.textView.sizeToFit()

通过界面生成器,我为UITextView设置了以下constraints,包括superView.bottom = textView.bottom + 25

但这是我运行应用程序时得到的结果:

如果有人知道我该如何解决这个问题以适应整个“扩展”textView,如果您能告诉我,我们将不胜感激。 提前致谢。

【问题讨论】:

它是文本视图而不是标签是否有原因? 我是这么认为的,但现在我想起来了,我认为只要标签具有多行和动态高度,它就可以工作。事实是我不知道会有多少文字,所以你认为标签也可以工作吗? @Wain 你能发布整个视图控制器及其约束吗?它还取决于其他约束。 文本域超级视图的高度是固定的还是可变的?因为您为文本字段设置了高度约束和顶部、底部空间约束, 【参考方案1】:

使用标签而不是文本视图。重要的区别是标签具有固有的内容大小,而文本视图没有(因为它旨在滚动其内容)。这允许标签与约束系统一起显示所有文本(无需计算大小)。

如果您继续使用文本视图,则应添加高度约束并计算所需高度并适当配置约束。

【讨论】:

谢谢,听起来不错!我切换到 UILabel 但现在 this 是我得到的:。我将底部约束设置为 superView 和高度 >= 比一个常数。有任何想法吗?再次感谢! 基本上永远不要使用 >=,而且你不需要高度限制,如果你想在边缘限制上添加填充 好的,那我试试去掉!我放只是因为我想要超级视图的最小高度。 不幸的是,删除它并没有太大变化。我试过了,它仍然有最小高度,但它保持固定。 These 是 UILabel 上的约束。难道是我在 ViewDidLoad() 中更改了 UILabel 的内容吗?它用一个值初始化,然后用另一个值更新。意思是我必须以某种方式更新约束吗? 我想通了,是“alignbottomto : View”谢谢!

以上是关于Autolayout - 使超级视图高度等于子视图高度+常量,其中子视图是 textView的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 AutoLayout 使两个视图居中

添加子视图并使用 AutoLayout 将前沿与超级视图对齐并包裹视图

使用 AutoLayout 动态布局滚动视图 contentSize

如何使用 AutoLayout 根据父高度调整子视图高度而不添加/删除约束

iOS Autolayout 视图高度基于较大的子视图高度

视图和超级视图之间的 NSSpace 属性必须匹配(AutoLayout)