使用AutoLayout在UIScrollView中使用UITextView

Sod*_*ukh 29 objective-c uiscrollview uitextview autolayout nslayoutconstraint

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

  • 我将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却没有.有什么我错过的吗?

Sod*_*ukh 78

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

  1. 在Storyboard的主视图中添加UIScrollView
  2. 在UIScrollView中添加UIView
  3. 在UIView中添加UITextView(在步骤2中添加的视图)
  4. 确保未选中UITextView的"Scrolling Enabled"
  5. 在UIScrollView上添加4个约束(前导,尾随,顶部,底部)
  6. 在UIView上添加4个约束(前导,尾随,顶部,底部)(步骤2中添加的视图)
  7. 在UIView(步骤2中添加的视图)和主视图上添加"Width Equally"约束
  8. 在UITextView上添加5个约束(前导,尾随,顶部,底部,高度).在此步骤之后,您不应该获得有关约束的任何错误和警告.
  9. 在ViewController上添加UITextView高度约束IBOutlet.@property (nonatomic, weak) IBOutlet NSLayoutConstraint *textViewHeightConstraint;并在Storyboard中连接它
  10. 以编程方式更改UITextView高度约束. self.textViewHeightConstraint.constant = [self.textView sizeThatFits:CGSizeMake(self.textView.frame.size.width, CGFLOAT_MAX)].height;

完成所有这10个步骤后,您将完全使用UITextView内部的UIScrollView,并感到高兴.

  • 此外,您不需要文本视图高度约束和任何IBOutlet约束代码.UITextView将自动调整大小以适合文本.删除约束和`textViewHeightConstraint`代码,它仍然可以正常工作. (5认同)
  • 简而言之,这里的重要部分是,当我遇到同样的问题时,我可以确认,需要在UIScrollView中添加一个简单的UIView,然后将所有项放在UIView中,而不是放入UIScrollView中.否则,Scrollview内的多行UITextViews将无法正确自动调整其宽度和高度. (2认同)
  • “确保未选中 UITextView 的“滚动启用”” - 这是我的问题。文本视图之前根本不显示。我将滚动启用设置为 false,然后繁荣 - 就在那里!意外! (2认同)

Sur*_*gch 7

似乎这个问题有一个适用于许多人的答案.但是,应该注意文档说明:

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

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

另请参阅:滚动视图内的滚动视图

  • 禁用文本视图的滚动时,它可以正常工作. (3认同)

Vit*_*pov 5

如果您注意到 Auto Layout 仍在抱怨 UIScrollView 的高度 -

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

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

在此处输入图片说明