使用AutoLayout在UIScrollView中使用UITextView

时间:2014-12-26 02:37:33

标签: objective-c uiscrollview autolayout uitextview nslayoutconstraint

我试图将UITextView放在UIScrollView中,使用AutoLayout,但没有运气。我试过的是,

  • 我将UIScrollView放在Storyboard的主视图中
  • 我将UITextView放在故事板中的UIScrollView中并禁用了Scrolling Enabled
  • 我在UIScrollView
  • 上设置了约束(前导,尾随,顶部,底部)
  • 我在UITextView
  • 上设置了约束(top,leading,trailing,height)
  • 我创建了UITextView的高度约束的IBOutlet
  • 我在viewDidLoad()中的UITextView上设置了一个文本(很多可能导致滚动的文本)
  • 我使用下面的代码设置了UITextView的高度约束。我在viewDidLoad()和viewDidLayoutSubviews()中设置文本后立即尝试了,没有运气

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

UITextView正在增加其高度,但UIScrollView却没有。有什么我错过的吗?

5 个答案:

答案 0 :(得分:75)

经过几天的研究并用UIScrollView + UITextView + Auto Layout弄脏了我,我成功地获得了一个完全正常工作的UIScrollView。我想分享我的解决方案,万一有人可能会遇到同样的情况。

  1. 在Storyboard
  2. 的主视图中添加UIScrollView
  3. 在UIScrollView
  4. 中添加UIView
  5. 在UIView中添加UITextView(步骤2中添加的视图)
  6. 确保取消选中UITextView的“滚动已启用”
  7. 在UIScrollView
  8. 上添加4个约束(前导,尾随,顶部,底部)
  9. 在UIView上添加4个约束(前导,尾随,顶部,底部)(步骤2中添加的视图)
  10. 在UIView(步骤2中添加的视图)和主视图
  11. 上添加“Width Equally”约束
  12. 在UITextView上添加5个约束(前导,尾随,顶部,底部,高度)。在此步骤之后,您不应该遇到任何关于约束的错误和警告。
  13. 在ViewController上添加UITextView高度约束IBOutlet。 @property (nonatomic, weak) IBOutlet NSLayoutConstraint *textViewHeightConstraint;并将其连接到Storyboard
  14. 以编程方式更改UITextView高度约束。 self.textViewHeightConstraint.constant = [self.textView sizeThatFits:CGSizeMake(self.textView.frame.size.width, CGFLOAT_MAX)].height;
  15. 完成所有这10个步骤之后,您将完全使用UITextView内部的UIScrollView,并感到高兴。

答案 1 :(得分:7)

似乎这个问题有一个适用于许多人的答案。但是,应该注意documentation个州:

  

在滚动视图中放置文本视图。文本视图处理自己的滚动。您不应该在滚动视图中嵌入文本视图对象。如果这样做,可能会导致意外行为,因为两个对象的触摸事件可能会混淆和错误处理。

在尝试将UITextView放入UIScrollView之前,您应该考虑这是否真的有必要。如果文本视图是滚动视图中复杂布局的一部分,请注意在接受的答案中使用UIView容器。

另请参阅:Scroll Views Inside Scroll Views

答案 2 :(得分:2)

如果您发现自动版式仍在抱怨UIScrollView的高度-

这里的问题是,默认情况下,UITextView已检查IB中的“滚动启用”

因此找到该复选框并取消选中它。

enter image description here

答案 3 :(得分:1)

我有一个如何计算UITextView动态高度的高度的例子+它在UIScackView里面的UIScrollView里面:https://github.com/fassko/ScrollStackViewExample

答案 4 :(得分:0)

Sodbileg的上述解决方案有效,但是您不需要他的所有步骤。按照他的第7步,使我的scrollview可以在其中滚动以文本视图。在第8步中,我添加了4个约束,但没有添加高度(别忘了底部约束!!)。我没有做剩下的。

我不确定,但是似乎textview的高度会自动调整,而不必我们手动更改。