旋转到横向时如何更新约束
How to update constraint whenrotate to landscape
我用这种方式给 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 是我的图像视图宽度。它在纵向视图中很好。但在横向视图中,它仍然采用与纵向 X 位置相同的 X 位置。当 phone 旋转到横向模式时,如何更新约束。请帮我。
谢谢
首先 - 您需要更改创建 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#>
}
}
我用这种方式给 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 是我的图像视图宽度。它在纵向视图中很好。但在横向视图中,它仍然采用与纵向 X 位置相同的 X 位置。当 phone 旋转到横向模式时,如何更新约束。请帮我。 谢谢
首先 - 您需要更改创建 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#>
}
}