【问题标题】:Different layout in landscape using Autolayout使用自动布局在横向中进行不同的布局
【发布时间】:2014-05-15 01:21:30
【问题描述】:

当我的应用旋转为横向时,我想使用不同的布局,请参阅以下图片:纵向:

风景:

蓝色方框代表UITextFields

在仍使用自动布局的情况下将设备旋转为横向时重新排列它们的最简单方法是什么?

【问题讨论】:

  • 您需要以编程方式添加约束
  • 你能发布一个例子作为答案吗?

标签: ios autolayout


【解决方案1】:

您需要为横向/纵向方向添加单独的约束。请参阅以下示例,它将对您有所帮助。这里我只为一个文本字段添加了约束。

textfld1.translatesAutoresizingMaskIntoConstraints = NO;


- (void) willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
    [textfld1 removeConstraints:textfld1.constraints];
    [self.view removeConstraints:self.view.constraints];

    if (toInterfaceOrientation == UIInterfaceOrientationPortrait || toInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown) {

        //You can use either center horizontally or Leading
        [self.view addConstraint:[NSLayoutConstraint constraintWithItem:textfld1
                                                              attribute:NSLayoutAttributeLeading
                                                              relatedBy:NSLayoutRelationEqual
                                                                 toItem:self.view
                                                              attribute:NSLayoutAttributeLeading
                                                             multiplier:1.0
                                                               constant:234.0]];

        //        // Center horizontally
        //        [self.view addConstraint:[NSLayoutConstraint constraintWithItem:textfld1
        //                                                              attribute:NSLayoutAttributeCenterX
        //                                                              relatedBy:NSLayoutRelationEqual
        //                                                                 toItem:self.view
        //                                                              attribute:NSLayoutAttributeCenterX
        //                                                             multiplier:1.0
        //                                                               constant:0.0]];

        [self.view addConstraint:[NSLayoutConstraint constraintWithItem:textfld1
                                                              attribute:NSLayoutAttributeTop
                                                              relatedBy:NSLayoutRelationEqual
                                                                 toItem:self.view
                                                              attribute:NSLayoutAttributeTop
                                                             multiplier:1.0
                                                               constant:100.0]];


    }else if (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft || toInterfaceOrientation == UIInterfaceOrientationLandscapeRight){

        [self.view addConstraint:[NSLayoutConstraint constraintWithItem:textfld1
                                                              attribute:NSLayoutAttributeLeading
                                                              relatedBy:NSLayoutRelationEqual
                                                                 toItem:self.view
                                                              attribute:NSLayoutAttributeLeading
                                                             multiplier:1.0
                                                               constant:120.0]];

        [self.view addConstraint:[NSLayoutConstraint constraintWithItem:textfld1
                                                              attribute:NSLayoutAttributeTop
                                                              relatedBy:NSLayoutRelationEqual
                                                                 toItem:self.view
                                                              attribute:NSLayoutAttributeTop
                                                             multiplier:1.0
                                                               constant:140.0]];

    }

    [self.view addConstraint:[NSLayoutConstraint constraintWithItem:textfld1
                                                          attribute:NSLayoutAttributeHeight
                                                          relatedBy:NSLayoutRelationEqual
                                                             toItem:nil
                                                          attribute:NSLayoutAttributeNotAnAttribute
                                                         multiplier:1.0
                                                           constant:30]];

    [self.view addConstraint:[NSLayoutConstraint constraintWithItem:textfld1
                                                          attribute:NSLayoutAttributeWidth
                                                          relatedBy:NSLayoutRelationEqual
                                                             toItem:nil
                                                          attribute:NSLayoutAttributeNotAnAttribute
                                                         multiplier:1.0
                                                           constant:300]];

}

【讨论】:

  • 有没有办法在界面生成器中为横向模式添加约束?
  • 您可以在界面生成器中使用 IBoutlet-NSLayoutConstraints 作为约束。
  • 对不起,我想问是否有办法为纵向和横向模式添加单独的约束,我知道在android上你可以通过将横向布局文件命名为“ xxx-land”,我只是想知道 iOS 上是否有任何等价物。
猜你喜欢
  • 1970-01-01
  • 2013-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-29
  • 2015-03-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多