另一个uiscrollview自动布局问题

时间:2015-10-22 02:17:08

标签: ios swift uiscrollview uibutton autolayout

我遇到的问题只是简单解释但令人难以置信。

我在更改滚动视图内容大小时遇到​​问题,只需点按一个包含以下代码的按钮

即可
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.我唯一的猜测是它与链接的约束有关,这些约束没什么特别的,只是居中并垂直固定,但我不知道从哪里开始调试。此外,当我删除设置的标题调用时,它会增长到1000!我不能为我的生活弄清楚为什么设置标题会弄乱内容大小。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

最简洁的方法可能是永远不要自己计算contentSize。当您将所有视图添加到UIScrollview时,它们具有的约束应该明确地确定contentSize。然后,UIScrollView将自动调整其大小。

当您需要在代码中更改某些大小/边距等时,您应该为约束创建一个IBOutlet并更改constraint.constant。 ScrollView将自动调整contentSize。

现在有一个棘手的事情:ScrollView不会减少contentSize,如果这意味着ScrollView中的视图变得不可见。 (我假设在调用showLess时,你正在从ScrollView的contentView中移出一些东西)你能想到的是创建一个Constraint来设置视图和ScrollView底部之间的间距。然后,您可以将此间距设置为负值(因此它将移动到scrollView下方)并将视图设置为隐藏。我想这可以解决你的问题。