页面滚动无法启用Autolayout

时间:2013-12-01 19:45:17

标签: ios ios7 autolayout

我有以下ViewController:

enter image description here

它顶部有两个UILabelsUIImageView,低于UITextView,低于此UIButton。我按照蓝线使用Interface Builder安排了它们。所有这些控件都在UIScrollView

[self.scrollView setContentSize:CGSizeMake(320, 660)];

[self.scrollView addSubview:self.descriptionText];
[self.scrollView addSubview:self.descriptionImage];
[self.scrollView addSubview:self.titleLabel];
[self.scrollView addSubview:self.feedNameLabel];
[self.scrollView addSubview:self.load];

因此,在启用Autolayout选项时,我只选择了ViewControler,然后选择了“Reset to Suggested Constraints in Description View Controller”。但是当我运行应用程序时,整个页面仍会显示滚动,但唯一的控件滚动是UIButton。向上滚动时,它将滚动到UITextView下方。

我已根据文字调整UITextView的大小,因此我希望我的UIButton始终与UITextView保持相同的距离。为此,我还将Vertical Spacing设置为UIButton,但是像这样,我没有任何滚动到我的页面。

第一次使用Autolayout,我可以得到一些关于我做错的建议吗?

编辑:

- (void)viewDidLoad
{
    [super viewDidLoad];

    UIView *contentView = [[UIView alloc]initWithFrame:CGRectMake(0,0,320,660)];
    [contentView addSubview:self.descriptionText];
    [contentView addSubview:self.descriptionImage];
    [contentView addSubview:self.titleLabel];
    [contentView addSubview:self.feedNameLabel];
    [contentView addSubview:self.load];
    contentView.translatesAutoresizingMaskIntoConstraints = YES;

    UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 320, 660)];
    //[scrollView setContentSize:CGSizeMake(320, 660)];
    [scrollView addSubview:contentView];

    [self.view addSubview:scrollView];

    // to resize UITextField
    [self.descriptionText sizeToFit];
    [self.descriptionText layoutIfNeeded];
    self.descriptionText.scrollEnabled = NO;
}

2 个答案:

答案 0 :(得分:1)

对于UIScrollView子视图,Autolayout有点棘手。我建议:

1 - 首先将所有控件(descriptionText + descriptionImage + titleLabel + feedNameLabel + load)嵌入UIView,比如contentView

UIView *contentView = [[UIView alloc]initWithFrame:CGRectMake(0,0,320,660)];
//add all controls as subviews to contenView

2 - 添加contentView作为self.scrollView的子视图。

3 - 将translatesAutoresizingMaskIntoConstraints的{​​{1}}属性保留为contentView

我建议您阅读Apple here的技术说明。

答案 1 :(得分:0)

如果您使用的是AutoLayout,则无需设置滚动视图的内容大小。事实上,我认为它根本没有效果。它是根据您设置的约束自动设置的。诀窍是你必须至少有一个与滚动视图的每一侧相关的约束,否则内容大小将是错误的,它不会滚动。因此,例如,如果您的图像非常大,则需要4个约束将UIImageView的边连接到UIScrollView的边。您可以阅读更多here