我有以下ViewController:
它顶部有两个UILabels
,UIImageView
,低于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;
}
答案 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。