我在iPad应用程序中有一个视图,在全屏模式下扩展以填充整个屏幕,并且可以纵向和横向显示。
此视图还包含许多子视图(如矩形卡片)和滚动视图。
[我以编程方式将这些添加到内容视图中,这是以编程方式创建的(在滚动视图中)相应地计算卡片的帧大小]
contentView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 640, 2000)];
[contentView addSubview:firstCard];
self.formScrollView = [[UIScrollView alloc] initWithFrame:self.view.bounds];
self.formScrollView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
self.formScrollView.scrollEnabled=true;
self.scrollView addSubview:contentView];
self.scrollView.contentSize=contentView.frame.size;
我的要求是,尽管取向,所有卡片将一个接一个地对齐,左右边距都有相等的空格。
不同高度的牌都宽度相等。
到目前为止,这是我试图将它们设置为水平居中的原因。我在viewDidLayoutSubviews
中添加了此代码段 [contentView addConstraint:[NSLayoutConstraint constraintWithItem:firstCard
attribute:NSLayoutAttributeCenterX
relatedBy:NSLayoutRelationEqual
toItem:contentView
attribute:NSLayoutAttributeCenterX
multiplier:1.0
constant:0.0]];
其中contentView引用全屏视图控制器中的contentView,第一张卡是第一张子视图卡
我还设置了属性
firstCard.translatesAutoresizingMaskIntoConstraints = NO;
在模拟器中运行时,我得到了灾难性的结果。视图奇怪地被抵消,而其他卡片都散布在其他地方。
当我没有设置约束时,这不会发生。它们看起来很丑陋,但它们仍然按照它们必须的方式垂直对齐。
我对自动布局和iOS开发都很陌生。
我想知道这些问题是否与我的contentView是一个固定的框架有关?
我保持contentView与这样一个固定的框架牢记,非全屏模式。
我哪里错了?我真的很感激任何帮助和建议。
感谢。
编辑: -
我还尝试对齐我的内容视图,使其保持居中于滚动视图。这是代码...
(那也是一场灾难,内容视图甚至没有出现在屏幕上)
[self.formScrollView addConstraint:[NSLayoutConstraint constraintWithItem:contentView
attribute:NSLayoutAttributeCenterX
relatedBy:NSLayoutRelationEqual
toItem:self.formScrollView
attribute:NSLayoutAttributeCenterX
multiplier:1.0
constant:0.0]];
}
[其中formScrollView是滚动视图]
答案 0 :(得分:0)
您还必须为卡片视图设置垂直约束。在您的情况下,每个视图"顶部" (从第一个视图开始)将与之前的视图"底部"有关系。这样它们就会垂直落在彼此之上。可以添加如下。
float verticalSpacing = 20.0f;
nextCard.translatesAutoresizingMaskIntoConstraints = NO;
[contentView addConstraint:[NSLayoutConstraint constraintWithItem:nextCard
attribute:NSLayoutAttributeCenterX
relatedBy:NSLayoutRelationEqual
toItem:contentView
attribute:NSLayoutAttributeCenterX
multiplier:1.0
constant:0.0]];
[contentView addConstraint:[NSLayoutConstraint constraintWithItem:nextCard
attribute:NSLayoutAttributeTop
relatedBy:NSLayoutRelationEqual
toItem:previousCard
attribute:NSLayoutAttributeBottom
multiplier:1.0
constant:verticalSpacing]];