我已经以纵向方式放置在屏幕底部的子视图:
我已在storyboard
中为此方向设置约束,以将其前导,尾随和底部空间固定到超级视图,以及子视图的固定高度。
当设备处于横向方向时,我希望此子视图位于屏幕的右侧,如下所示:
在我后面的UIViewController
子类中,我将M_PI / 2弧度旋转应用于viewWillTransitionToSize:withTransitionCoordinator:
中的子视图,然后我得到了这个结果:
我尝试将子视图放在屏幕右侧,因此在旋转后我调用[self.view setNeedsUpdateConstraints];
并尝试为此方向设置新约束,但我无法得到我想要的结果。所以,我不确定我是否试图做错事......我认为设置新的约束来将子视图固定到屏幕的右侧,会调整其高度并刷新其X值和Y值...或者正确的方法是翻译旋转的子视图并更改其框架?
我怎么解决这个问题?
由于
编辑:这是我以编程方式为横向设置的约束的示例:
NSLayoutConstraint *customSubviewConstraintTop = [NSLayoutConstraint constraintWithItem:self.customSubview
attribute:NSLayoutAttributeLeading
relatedBy:NSLayoutRelationEqual
toItem:self.view
attribute:NSLayoutAttributeLeading
multiplier:1.0
constant:0];
这应该将子视图的顶部(旋转前的左侧)固定到屏幕的顶部(屏幕右侧是纵向)...对吗?
编辑2:这是我在updateViewConstraints
中对横向限制的代码:
if (!isPortrait) {
self.customSubView.transform = CGAffineTransformRotate(CGAffineTransformIdentity, M_PI/2);
[self.view removeConstraint:self.customSubViewConstraintL];
[self.view removeConstraint:self.customSubViewConstraintR];
[self.view removeConstraint:self.customSubViewConstraintB];
[self.view removeConstraint:self.customSubViewConstraintH];
[self.customSubView setTranslatesAutoresizingMaskIntoConstraints:NO];
self.customSubViewConstraintH = [NSLayoutConstraint constraintWithItem:self.customSubView
attribute:NSLayoutAttributeWidth
relatedBy:NSLayoutRelationEqual
toItem:nil
attribute:NSLayoutAttributeNotAnAttribute
multiplier:1.0
constant:35.0];
self.customSubViewConstraintL = [NSLayoutConstraint constraintWithItem:self.customSubView
attribute:NSLayoutAttributeLeading
relatedBy:NSLayoutRelationEqual
toItem:self.view
attribute:NSLayoutAttributeLeading
multiplier:1.0
constant:0.0];
self.customSubViewConstraintR = [NSLayoutConstraint constraintWithItem:self.customSubView
attribute:NSLayoutAttributeTrailing
relatedBy:NSLayoutRelationEqual
toItem:self.view
attribute:NSLayoutAttributeTrailing
multiplier:1.0
constant:0.0];
self.customSubViewConstraintB = [NSLayoutConstraint constraintWithItem:self.customSubView
attribute:NSLayoutAttributeBottom
relatedBy:NSLayoutRelationEqual
toItem:self.view
attribute:NSLayoutAttributeBottom
multiplier:1.0
constant:0.0];
[self.view addConstraint:self.customSubViewConstraintH];
[self.view addConstraint:self.customSubViewConstraintL];
[self.view addConstraint:self.customSubViewConstraintR];
[self.view addConstraint:self.customSubViewConstraintB];
}
答案 0 :(得分:1)
您可能使用屏幕限制约束,例如BottomLayoutGuide。请改用垂直间距。
UPD:问题是您在viewWillTransitionToSize:withTransitionCoordinator:
中将轮播设置为自定义视图。只需设置所需的高度和宽度。