繁体   English   中英

UIScrollView自动调整大小contentSize吗?

[英]UIScrollView autoresize contentSize?

公平的警告,我是iOS的新手,可能缺少明显的东西。

我有一个带有几个字段的UIScrollView ,这些字段的高度可以更改( UITextView可以拉伸以适合文本,可折叠字段等)。 显然,我希望scrollview contenSize适合内容以便允许滚动。

现在,我将其设置为每次发生更改时都重新计算并设置contentSize ,这很好,但是有更好的方法吗? 换句话说,如果另一个开发人员现在添加了一个字段并且不记得将其添加到重新计算函数中,除非我弄错了,即使该字段在scrollview上,scrollview contentSize还是错误的? 是否没有办法随着内容的更改而“自动”调整大小?

是的,有一种更好的方法可以通过自动布局实现。 苹果公司有一个很好的文档,可以在这里使用带有滚动视图的自动布局。 我更喜欢纯自动布局的方法,但是要应用该方法,必须确保字段的大小不依赖于滚动视图的大小,这是有道理的。 但是,请确保您的约束扩展到滚动视图的所有侧面,以便滚动视图可以确定其内容的大小。

(即@"H:|[textView(==view)]|"@"V:|[textView(50)]|" ,其中'|'表示scrollView,其textView是其子视图,而'== view '仅指定textView的宽度必须与视图'view'的宽度相同。)

如果自动布局是您的选择,那么就选择它-正如泰勒所说,自动布局为您抽象了调整大小的方法! :)不幸的是我还没有自动布局的经验,所以我不能再告诉你更多有关它的信息。

据我所知,没有自动布局,没有更好的方法。 没有像“ sizeToFit”或“ sizeThatFits”这样的东西可以接管自动调整内容大小的任务。 您必须自己重新计算内容大小。 为此,请使用您的自定义方法来执行此重新计算任务,或者在UIScrollView上查看一些已经为您实现并抽象化的第三方类别。

例如: UIScrollView + MTUIAdditions.m (请参阅UIScrollView (MTUIAdditions)

最好的解决方案

//autoresize scrollView
CGFloat scrollViewHeight = 0.0f;
CGFloat scrollViewWidth = 0.0f;
for (UIView *view in self.scrollView.subviews) {
    CGFloat height = (view.frame.size.height + view.frame.origin.y);
    scrollViewHeight = ((height > scrollViewHeight) ? height : scrollViewHeight);

    CGFloat width = (view.frame.size.width + view.frame.origin.x);
    scrollViewWidth = ((width > scrollViewWidth) ? width : scrollViewWidth);
}

[self.scrollView setContentSize:(CGSizeMake(scrollViewWidth, scrollViewHeight))];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM