纵向而不是横向的自动布局方向更改

Posted

技术标签:

【中文标题】纵向而不是横向的自动布局方向更改【英文标题】:Auto layout orientation change for portrait but not horizontal 【发布时间】:2014-05-20 02:33:31 【问题描述】:

我将应用的布局设计为横向,但纵向时看起来过于狭窄。当它处于纵向时,我想将我的所有UILabels 向下移动 10 个左右像素。我尝试通过使用自动布局设置上限约束来做到这一点。而且我能够获得我想要的纵向位置,但它也改变了UILabels 的横向位置。我考虑将所有标签都转为IBOutlets,并以编程方式更改它们的位置。但我想知道是否有更简单或更有效的解决方案?

【问题讨论】:

实现自动布局约束怎么样? 当我这样做时,它会改变我的 UILabel 在横向和纵向方向的位置,但我只希望它改变纵向。 【参考方案1】:

您可以向 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

【讨论】:

感谢您的回复!如何将约束与要移动的 UILabel 连接起来? 我添加了另一种方法,它向您展示了创建约束的典型方法。注意:我没有运行代码,所以可能会有错误。我之前也没有使用过这个构造函数,所以我不确定它是否有预期的效果。

以上是关于纵向而不是横向的自动布局方向更改的主要内容,如果未能解决你的问题,请参考以下文章

如何使用自动布局为纵向和横向方向配置不同的布局?

自动布局:UIImageView 不随设备方向旋转

更改方向的自动布局约束

使用自动布局更改方向时更改内容顺序

在自动布局中方向更改为横向时隐藏视图

如何针对不同的 iPhone 屏幕尺寸在纵向和横向中使用自动布局