IOS/Autolayout:如何修复大文本视图的宽度?

Posted

技术标签:

【中文标题】IOS/Autolayout:如何修复大文本视图的宽度?【英文标题】:IOS/Autolayout: How to fix width of large textview? 【发布时间】:2017-12-30 21:15:42 【问题描述】:

我在尝试在自动布局中修复 textview 的宽度时遇到了可怕的事情。 textview 是屏幕中的主要元素,所以我无法修复它正在破坏整个屏幕。

设置是一个包含滚动视图的视图,包含一个包含元素的内容视图。按照 Apple 的说明,我将视图、滚动视图和内容视图的宽度设置为 375,并将内容视图固定到滚动视图,将滚动视图固定到所有四个侧面的视图,常量均为 0。

我希望文本视图居中且相当宽。因此,我首先将其设置为 contentview 的前导常量 40,contentview 的尾随常量 40,宽度为 295。在 7 Plus 上,这在右侧和 SE 上留下了太宽的边距,textview超出右边距。很自然的事情似乎是删除了宽度约束,所以只有一个前导和尾随约束,但这导致整个视图缩小到 113。我无法想出明显的理由来让这种情况发生,但是发生了做过。然后我尝试重置为 295 但小于或等于。我也尝试设置为 295,但降低了优先级。在优先级为 750 时,它的行为就像在 1000 时一样。在优先级为 500 时,视图缩小到 113。

最令人气愤的。附件见约束的截图。提前感谢您的任何建议。

编辑:

从this post 看来,UITextViews 可能无法调整其大小以响应自动布局。所以也许没有办法在自动布局instoryboard中通过连接约束并用代码修改它来完成这一切。我不敢相信 Apple 不支持故事板中带有 textviews 的自动布局,所以仍然希望有更好的方法。

【问题讨论】:

【参考方案1】:

控制从内容视图拖动到最外层视图并使它们等宽

【讨论】:

这是有道理的。但是,我删除了 noteView 的 centerx 约束和宽度约束,整个场景的宽度立即缩小到视图大小的一半左右。 contentVIew 从 375 缩减到 143.5,notesview 从 295 缩减到 63.5。这实际上是一种奇怪的感觉。如果前导和尾随都是 40,那么 notesview 应该比 contentview 少 80。但是我不明白为什么当我删除 notesview 的宽度时 contentview 和 notesview 都缩小了 231.5。 我还尝试删除前导和尾随约束,然后将左侧和右侧的注释视图“重新固定”到常量为 40 的内容视图。但是,它没有帮助。 contentview 立即将其宽度调整为 143.5。 我认为问题与 notesview 固定到 contentview 但 contentview 正在从没有指定宽度的 notesview 中获取其宽度。它最终以 63.5 的奇异宽度结束 notesview,这可能是一些其他水平偏移与其他元素的伪影,这些元素应该基于从 contentview 派生的 noteview 宽度,而不是相反 去掉contentView的375宽度,设置为viewController的视图 控制从内容视图拖到最外层视图,并使它们等宽【参考方案2】:

如果我理解正确,您将 view/scrollView/contentView 的宽度设置为固定宽度,即 375 pt。这显然会给您在较小的屏幕(如 iPhone 5)和较大的屏幕(如 Plus)上带来问题。

您应该将内容视图设置为与最外层视图具有相同的宽度。

如果您正在使用情节提要并且您的最外层视图是视图控制器的主视图,那么它的宽度已经为您设置好了。 相反,如果您有一个 xib,则应在将其添加为子视图的位置设置视图的宽度。显然它的宽度应该是相对于屏幕宽度来设置的。

【讨论】:

我将滚动视图和内容视图的宽度固定到最外面的视图控制器。我无法手动设置它们。对于最外层的 VC,它必须有一些宽度,所以我将它设置为 375,而不是限制,而是在尺寸检查器中。我相信故事板现在将它们默认设置为 600。我不知道有什么方法可以让它们没有一些宽度。

以上是关于IOS/Autolayout:如何修复大文本视图的宽度?的主要内容,如果未能解决你的问题,请参考以下文章

iOS Autolayout:调整大小父视图中的 UILabels 问题

ios Autolayout - 在图像上对齐文本

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

iOS Autolayout如何在superview中拉伸子视图

iOS Autolayout:如何显示/隐藏包含边距的视图?

iOS 8 xib + AutoLayout 无法为 tableViewHeaderView 正常工作