【问题标题】:iOS- Programmatically set the left and right margins of a subview to be equaliOS-以编程方式将子视图的左右边距设置为相等
【发布时间】:2015-10-25 15:42:22
【问题描述】:

我在 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 中添加了这段代码 sn-p

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

【问题讨论】:

    标签: ios objective-c ipad uiview autolayout


    【解决方案1】:

    您还必须为卡片视图设置垂直约束。在您的情况下,每个视图的“顶部”(从第一个视图之后开始)将与早期视图的“底部”有关系。使它们垂直地落下。可以如下添加。

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

    【讨论】:

    • 非常感谢。在将卡片添加到内容视图时,我会记住这一点。但是我还想要的是我的内容视图应该正确居中。
    • 另外我想补充一点,我想出了如何让 contentView 居中...就像我如何为滚动视图使用自动调整掩码 contentView.autoresizingMask= UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleRightMargin;
    猜你喜欢
    • 2015-02-24
    • 2011-11-22
    • 2011-04-08
    • 2011-05-27
    • 2011-02-12
    • 1970-01-01
    • 2019-02-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多