2

公平的警告,我对 iOS 还很陌生,可能会遗漏一些明显的东西。

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

现在我将它设置为重新计算并设置contentSize每次发生变化时,这工作正常但有更好的方法吗?换句话说,如果另一个开发人员现在添加了一个字段并且不记得将其添加到重新计算功能中,除非我弄错了,contentSize即使该字段在滚动视图上,滚动视图也会出错?有没有办法让它随着内容的变化而“自动”调整大小?

4

3 回答 3

4

是的,有一种更好的方法可以通过自动布局来实现这一点。Apple 有一个非常好的文档,用于在此处使用带有滚动视图的自动布局。我更喜欢纯自动布局方法,但是为了应用这种方法,您必须确保字段的大小不依赖于滚动视图的大小,这是有道理的。但是请确保您的约束扩展到滚动视图的所有侧面,以便滚动视图可以确定其内容的大小。

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

于 2013-08-29T20:53:44.757 回答
1

如果自动布局是您的一个选项,那么就选择它 - 正如 Tyler 所说,自动布局为您抽象了调整大小!:) 不幸的是,我还没有使用自动布局的经验,所以我不能告诉你更多。

据我所知,没有自动布局没有更好的方法。没有什么像“sizeToFit”或“sizeThatFits”可以自动接管调整内容大小的任务。您必须自己重新计算内容大小。为此,要么使用您的自定义方法进行此重新计算任务,要么查看 UIScrollView 上的一些 3rd-party 类别,这些类别已经为您实现和抽象。

例如:UIScrollView+MTUIAdditions.m (参见实现UIScrollView (MTUIAdditions)

于 2013-08-30T08:17:58.817 回答
0

最佳解决方案

//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))];
于 2015-11-26T20:03:54.167 回答