UIScrollView ContentSize.height默认为0.0000?

时间:2013-05-01 15:29:08

标签: ios objective-c uiscrollview contentsize

我正在尝试使用UIScrollView创建一个动态表单,但我注意到当我使用NSLog时,我的scrollView的contentSize.height = 0.00000我将scrollView构建为故事板上屏幕的宽度和高度里面的元素。那为什么它会返回0? scrollView中的所有元素都正常显示/运行。 scrollView的contentSize总是默认为0而我只需要设置它吗?

3 个答案:

答案 0 :(得分: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];

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

答案 1 :(得分:2)

是的,默认情况下,UIScrollView的内容大小为0。为了将滚动引入scrollView,您需要设置某些属性,如setScrollEnabled,set Bouncing,设置Horizo​​ntal / Vertical滚动以及UIScrollView最重要的contentSize。除非内容大小大于UIScrollView的大小,否则UIScrollView不会拥有滚动。

答案 2 :(得分:0)

尝试在ScrollView中放置UIView不要在UIView上设置任何约束。接下来将所有表单控件放在UIView中并正常约束它们。

现在是将表单底部约束的最后一个控件设置为UIView (即表单底部)这将通过Autolayout,您不仅可以拥有高度值,还可以垂直滚动表单。也...

  1. 不要设置scrollView.contentSize
  2. 不要设置translatesAutoresizingMaskIntoConstraints(保留为默认值)
  3. 不要使用约束设置表单的高度(UIView)这是Autolayout的作用
  4. 不要在表单上设置任何约束(UIView)
  5. 注意:如果您希望表单(UIView)的宽度与您的设备相同...然后右键单击导航栏中的表单(UIView)(即树中列出所有控件的位置)样式)然后将其拖动到主要的顶部UIView元素。然后在弹出窗口中选择相等的宽度