另一个 uiscrollview 自动布局问题
Posted
技术标签:
【中文标题】另一个 uiscrollview 自动布局问题【英文标题】:Another uiscrollview auto layout issue 【发布时间】:2015-10-22 02:17:08 【问题描述】:我有一个简单解释但令人难以置信的问题。
我在使用以下代码点击按钮时更改滚动视图内容大小时遇到问题
if condition
scrollView.contentSize = CGSizeMake(self.scrollView.frame.size.width, 1000 )
button.setTitle("SHOW LESS", forState: .Normal)
else
scrollView.contentSize = CGSizeMake(self.scrollView.frame.size.width, 200 )
button.setTitle("SHOW MORE", forState: .Normal)
我正在使用自动布局,我知道在视图生命周期中尚未设置框架会导致问题,但此代码是在 IBAcition 中执行的。奇怪的是,如果内容大小大于 200 开始,它会缩小。它永远不会增长到 1000。我唯一的猜测是它与链接到按钮的约束有关,这些约束没什么特别的,只是居中并垂直固定,但我不知道从哪里开始调试。此外,当我删除 set title 调用时,它确实增长到 1000!我一生都无法弄清楚为什么设置标题会弄乱内容大小。有什么想法吗?
【问题讨论】:
你能解释一下你想要达到的目标吗?为什么要更改contentSize
而不是滚动视图的实际大小?使用自动布局时,您不应该真正手动设置contentSize
。也许截图会有所帮助。
所以实现的整体功能是在滚动视图中隐藏和显示内容,这需要相当频繁地重新计算内容大小......是否有使用自动布局的首选方法?我已经研究了一些关于自动布局和滚动视图的 UILabel 调整大小的东西和苹果文档,但还没有找到一个很好的解决方案
看起来这是一个相当普遍的问题。我在这里找到了一个与你们所说的一致的解决方案。自动布局和 contentSize ***.com/questions/12846351/… 的行为很奇怪
【参考方案1】:
解决此问题的最简洁方法可能是永远不要自己计算 contentSize。当您将所有视图添加到 UIScrollview 时,它们所具有的约束应该明确地确定 contentSize。然后,UIScrollView 会自动调整它的大小。
当您需要在代码中更改一些大小/边距等时,您可能应该为约束创建一个 IBOutlet 并更改 constraint.constant。 ScrollView 会自动调整 contentSize。
现在有一件棘手的事情:ScrollView 不会减小 contentSize,如果这意味着 ScrollView 中的视图变得不可见。 (我假设当调用 showLess 时,您正在从 ScrollView 的 contentView 中移出一些东西)您可以做的是创建一个约束来设置视图和 ScrollView 底部之间的间距。然后您可以将此间距设置为负值(使其移动到滚动视图下方)并将视图设置为隐藏。我想这会解决你的问题。
【讨论】:
啊,有趣,我会试一试,让你知道。我理解你的意思,但是关于在滚动视图中添加所有相对的视图......不幸的是,在这种情况下,我实现了隐藏和显示行为,因此复杂的 contentSize 重新计算以上是关于另一个 uiscrollview 自动布局问题的主要内容,如果未能解决你的问题,请参考以下文章
UIScrollView SetContentSize 与自动布局