ios - 旋转到横向时如何更新约束

标签 ios nslayoutconstraint ios-autolayout

我以这种方式向 UIImageView 添加了一个约束

 //-----------Add constraints to rightoval image-----------------

NSArray *constr_V2=[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-100-[rightOval(210)]|"
                                                          options:0
                                                          metrics:nil views:back];

NSArray *constr_H2 = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-rgtOvalX-[rightOval(65)]|"
                                                            options:NSLayoutFormatDirectionLeadingToTrailing
                                                            metrics:metrices
                                                              views:back];

[self.view addConstraints:constr_V2];
[self.view addConstraints:constr_H2];

这个rgtOvalX我是这样算出来的值

float rgtX=dm.screenWidth-65;

65 是我的 ImageView 宽度。它在纵向 View 中很好。但在横向 View 中,它仍然采用与纵向 X 位置相同的 X 位置。当手机旋转到横向模式时,如何更新约束。请帮我。 谢谢

最佳答案

首先 - 您需要更改创建 constr_H2 的方式,因为您需要访问约束,该约束放置 rightOval 左边缘。

NSArray *constr_H2 = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-rgtOvalX-[rightOval(65)]|"
                                                        options:NSLayoutFormatDirectionLeadingToTrailing
                                                        metrics:metrices
                                                          views:back];
//This constant should be available in all view controller. Make property, for example
NSLayoutConstraint *rightOvalLeftEdge = [NSLayoutConstraint constraintWithItem:<#rightOval#>
                                                                     attribute:NSLayoutAttributeLeft
                                                                     relatedBy:NSLayoutRelationEqual
                                                                        toItem:<#rightOvalSuperView#>
                                                                     attribute:NSLayoutAttributeLeft
                                                                    multiplier:1.
                                                                      constant:0];

其次,在您的 viewController 中的方法 -traitCollectionDidChange:

- (void) traitCollectionDidChange:(UITraitCollection *)previousTraitCollection {
    [super traitCollectionDidChange:previousTraitCollection];


    if(previousTraitCollection.horizontalSizeClass != self.traitCollection.horizontalSizeClass) {
        if(self.traitCollection.horizontalSizeClass == UIUserInterfaceSizeClassCompact)
            self.rightOvalLeftEdge.constant = <#Calculate space in portrait orientation#>
        else if (self.traitCollection.horizontalSizeClass == UIUserInterfaceSizeClassRegular)
            self.rightOvalLeftEdge.constant = <#Calculate space in album orientation#>
    }
}

关于ios - 旋转到横向时如何更新约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35506656/

相关文章:

ios - 调用prepareForSegue时不发送参数,导致崩溃

ios - 如何在 iOS 10 中设置应用程序图标角标(Badge)编号?

ios - 无法约束将 UIView 固定到单元格 contentView 的底部

ios - 添加约束后文本不会显示

swift - UICollectionViewCell 内的动 Canvas 局更改及其具有 AutoLayout 约束的 subview

ios - Swift: View 不适应程序限制

swift - 更改自动布局 anchor 约束

iphone - iOS 版 AIR : create enterprise App without the certificate

ios - 如何在 Swift 中创建独特的形状或 UIView

ios - 代码中的 NSLayoutConstraint 常量标准值