自动布局方向更改为纵向但不是水平

时间:2014-05-20 02:33:31

标签: ios position xcode5 orientation autolayout

我使用横向方向设计了我的应用程序的布局,但是当它处于纵向方向时,它看起来太拥挤了。当它处于纵向状态时,我希望将所有UILabels向下移动大约10个像素。我尝试通过使用自动布局设置上限制来执行此操作。我能够以纵向获得我想要的位置,但它也改变了UILabels的横向位置。我考虑过将所有标签转换为IBOutlets并以编程方式更改其位置。但我想知道是否有更简单或更有效的解决方案?

1 个答案:

答案 0 :(得分:0)

您可以向UILabel添加约束,并在更改方向时更改它们。例如,向UILabel添加一个约束,使其从屏幕顶部开始x像素。移动到纵向时,可以将约束更新为x + 10。

@interface YourClass()

@property (nonatomic, strong) UILabel *label;
@property (nonatomic, strong) NSLayoutConstraint *constraint;

@end

@implementation YourClass

- (void)setupConstraints {
    self.constraint = [NSLayoutConstraint constraintWithItem:self.label
                                                   attribute:NSLayoutAttributeTop
                                                   relatedBy:NSLayoutRelationEqual
                                                      toItem:self.view
                                                   attribute:NSLayoutAttributeHeight
                                                  multiplier:0
                                                    constant:20];
}

// Call this method every time orientation changes.
- (void)updateConstraints {
    if([[UIDevice currentDevice] orientation] == UIDeviceOrientationPortrait) {
        self.constraint.constant = 30;
    } else {
        self.constraint.constant = 20;
    }
}

@end