2

我正在尝试使用 UIScrollView 创建一个动态表单,但我注意到当我使用NSLog我的滚动视图时,我将滚动视图contentSize.height = 0.00000构建为情节提要上屏幕的宽度和高度,其中包含元素。那么为什么它返回 0 呢?scrollView 中的所有元素都正确显示/运行。scrollView 的 contentSize 是否总是默认为 0 而我只需要设置它?

4

3 回答 3

2

是,默认为 0。您应该通过将所有视图高度和它们之间的空间相加来设置滚动视图的内容大小,例如:

UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 320, 60)];
scrollView.backgroundColor = [UIColor blueColor];
[self.view addSubview:scrollView];

NSUInteger spaceBetweenLabels = 10;

UILabel *firstLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 0, 300, 40)];
firstLabel.text = @"first label text";

UILabel *secondLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, spaceBetweenLabels + firstLabel.frame.size.height, 300, 40)];
secondLabel.text = @"second label text";

[scrollView addSubview:firstLabel];
[scrollView addSubview:secondLabel];

CGSize fullContentSize = CGSizeMake(300, firstLabel.frame.size.height + secondLabel.frame.size.height + spaceBetweenLabels);

[scrollView setContentSize:fullContentSize];

当然,如果您的滚动视图高度高于内容大小高度,它将不会滚动,因为一切都在屏幕上。

于 2013-05-01T16:20:03.000 回答
2

是的 UIScrollView 的内容大小默认为 0 零。为了在你的 scrollView 中引入滚动,你需要为 UIScrollView 设置某些属性,比如 setScrollEnabled 、 set Bouncing 、设置水平/垂直滚动和最重要的 contentSize 。除非内容大小大于 UIScrollView 的大小,否则 UIScrollView 不会滚动。

于 2013-05-01T16:41:48.690 回答
1

尝试在 ScrollView 中放置 UIView,不要对 UIView 设置任何约束。接下来将所有表单控件放在 UIView 中,并像往常一样约束它们。

现在的关键是将表单底部约束的最后一个控件设置为 UIView(即表单的底部),这将通过 Autolayout 进行转换,不仅您将获得一个高度值,而且您将能够垂直滚动您的表单。还...

  1. 不要设置 scrollView.contentSize
  2. 不要设置 translatesAutoresizingMaskIntoConstraints (保留为默认值)
  3. 不要使用约束设置表单(UIView)的高度,这是 Autolayout 所做的
  4. 不要在表单(UIView)上设置任何约束

注意:如果您希望表单(UIView)的宽度与您的设备相同......然后右键单击导航栏中的表单(UIView)(即所有控件都以树样式列出)和然后将其拖到主顶部 UIView 元素。然后在弹出窗口中选择相等的宽度

于 2016-06-12T07:15:27.487 回答