UIScrollView内容大小固定为600x600(Main.storyboard大小)

时间:2015-02-18 06:10:16

标签: ios objective-c uiscrollview autolayout

过去两周我一直在面对这个问题而尚未找到解决方案。

我在我的应用程序中使用UIScrollview存在问题。 通常在我的应用程序中,有动态文本和不同大小的图像将来自webservices。例如,想象一下Facebook Newsfeed。我的申请类似于Facebook新闻源。有时,只有文字,有时会有文字和图像。并对该帖子发表评论。

正如我在许多链接中看到的那样,我跟随的层次结构是 SuperView - > UIScrollView - >内容视图,这些元素都放在该内容中视图。我将内容视图中元素的约束分配给Superview( ContentView ---约束 - SuperView )。当视图中的内容超出superview的大小时,它必须滚动。但是,scrollview内容大小限制为600x600的大小,即在main.storyboard中,当我们设计 W任何x H任何大小时。我看过很多教程并搜索了很多网站。但跟着他们没有给我带来好运。

任何帮助都很明显。

2 个答案:

答案 0 :(得分:6)

以下是如何在 Interface Builder 中设置一个滚动视图,从头开始使用自动布局

  1. 从新的ViewController开始。拖出一个scrollView,使其填充视图。取消约束到边距并将此scrollView的左,上,右和下边缘约束到其超视图的左侧,顶部,右侧和底部,偏移量为0.这样可以让scollView填充任何方向的任何设备上的屏幕。如果你愿意,你可以让你的scrollView占用较少的屏幕,只要确保它完全一致。

  2. 向scrollView添加视图。这应该是您的scrollView上唯一的顶级视图,它将作为您的contentView。

  3. 将此contentView的左,上,右和下边缘限制在scrollView的左侧,顶部,右侧和底部,偏移量为0.此时,您将看到有关模糊内容大小的警告。那是因为你还没有告诉它你的内容视图有多大。

  4. 要调整contentView的大小,请将宽度和高度约束添加到contentView。如果要滚动,则宽度和高度必须大于scrollView本身的宽度和高度。如果您只想垂直滚动,请将contentView的宽度设置为等于scrollView的宽度。为此,在文档大纲视图中, control -drag从contentView到scrollView,并从弹出窗口中选择 Equal Widths 。 / p>

  5. 如果您希望能够从代码更改contentView的高度(以考虑动态内容),请首先通过 control -dragging为您的contentView创建一个高度约束contentView并从弹出窗口中选择 Height 。通过 control - 从高度约束(在文档大纲视图中找到)拖拽到ViewController的代码,为高度约束创建IBOutlet。为插座指定名称scrollViewHeight,然后在需要更改scrollView的高度时将高度设置为scrollViewHeight.constant = 2000

答案 1 :(得分:3)

只需将您的UIScrollView添加到故事板中的UIViewController视图,并在界面构建器中添加适当的约束。

然后,在代码中构建您的内容视图并为其提供您想要的任何框架,现在开始将控件添加到此内容视图并计算每个视图的大小(尤其是高度),最后您有总数控件的高度。

现在设置内容视图的框架以匹配该高度,并将其作为子视图添加到滚动视图,然后在代码中设置内容大小,如下所示:

_scrollView.contentSize = contentView.frame.size;

另一个注意事项是,对viewDidLayoutSubviews中的大小进行此更改以避免不同屏幕大小的任何问题但要小心,此事件被多次调用,因此有一个BOOL或其他东西来确保创建视图的代码并添加它滚动视图执行一次,例如像这样

- (void)viewDidLayoutSubviews {
     [super viewDidLayoutSubviews];
     if (! built) {
         // Do everything I explained above here

        built = YES;
        [self.view layoutSubviews];
     }
}