iOS-以编程方式将子视图的左右边距设置为相等

时间:2015-08-03 13:39:42

标签: ios objective-c ipad uiview autolayout

我在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是滚动视图]

1 个答案:

答案 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]];