滚动视图中的 UITextView 与 Autolayout iOS 不工作

Posted

技术标签:

【中文标题】滚动视图中的 UITextView 与 Autolayout iOS 不工作【英文标题】:UITextView inside a scrollView with Autolayout iOS not working 【发布时间】:2017-03-10 18:09:09 【问题描述】:

我正在尝试创建一个包含一些固定图形元素和一些动态文本的动态 UIView。我找不到适用于我的项目的教程或文档中的内容。下面是我的分解图(我的 scrollView 视图和主视图的高度在 iphone 5 视图中被强制为 800,仅用于这个问题)

我想实现什么? Header、图片、静态视图和静态视图 2 都是固定的,不会随内容而改变。标签 1、标签 2 和文本区域将随着它们的内容大小而增长。

我在这件事上工作了大约一天,我需要一点帮助,因为我无法获得任何结果。我已经尝试过这个解决方案:

solution 1

通过这个解决方案,我可以在 NSLog() 中看到返回正确值的 textview 约束

self.textViewHeightConstraint.constant = [textview sizeThatFits:CGSizeMake(textview.frame.size.width, CGFLOAT_MAX)].height; 

但运行时的 textarea 框架保持不变。

我也试过这个教程:

solution 2

它适用于只有滚动视图、内容视图和文本视图的项目。当我尝试在我的项目中使用该逻辑时,它不再起作用了。

我尝试了许多其他解决方案,所以我的问题是:我怎样才能达到预期的结果?或者我的布局设置中可能有一些可笑的错误?或者简单地说,是否有人可以向我指出涵盖类似视图组织的教程?

【问题讨论】:

【参考方案1】:

您应该避免在带有 AutoLayout 的 UIScrollView 中包含复杂的嵌套子视图,而应该将它们放在子视图中。最好的开始:

1:在UIScrollView 中放置一个UIView,并将leading/trailing/top/bottom 约束设置为0 到UIScrollView

2:将所有子视图放在一个UIView

3:一旦您更改了UIView 内任何子视图的文本/动态内容,您只需计算scrollView.contentSize 并通过一组复杂嵌套子视图所需的代码进行相应的设置。

您更好的选择:

改为使用UITableView,它具有scrollView 方法,并且无需所有意大利面条式代码即可非常轻松地为您处理动态布局。

【讨论】:

以上是关于滚动视图中的 UITextView 与 Autolayout iOS 不工作的主要内容,如果未能解决你的问题,请参考以下文章

UIScrollView 中的 UITextView 都在另一个 UIScrollView 中

UITextView 使用自动布局动态扩展为滚动视图内的文本

在 UIScrollView 中自动调整 UITextView 的大小

在图像上淡出滚动 UITextView?

如何将 UITableViewCell 中的 UITextView 滚动到键盘顶部?

带有自定义 UITextView 单元格的 TableView 将导航栏滚动到屏幕外