用autolayout如何在横竖屏切换情况下改变控件的位置
2014-04-04 17:47
423 查看
在IB中,你用的autolayout来设置控件的位置和大小,你有一个需求,有一个imageView,水平居中,竖屏时距离top 280,但横屏时只有180,需要往上移一下。这怎么实现呢,好像在IB中没法设置他的动态距离吧?(如果哪位知道,请告诉我)
IB中不能设置,只好在代码中设置了。因为每次转屏时都会调用viewWillLayoutSubviews,所以在这个方法里设置就可以,具体方法是:
-(void)viewWillLayoutSubviews
{
if (constraint) {
[self.view
removeConstraint:constraint];
}
if ([UIApplication
sharedApplication].statusBarOrientation ==
UIDeviceOrientationPortrait || [UIApplication
sharedApplication].statusBarOrientation ==
UIDeviceOrientationPortraitUpsideDown)
{
constraint = [
NSLayoutConstraint
constraintWithItem:self.view
attribute:NSLayoutAttributeTop
relatedBy:NSLayoutRelationEqual
toItem:self.backgroundImage
attribute:NSLayoutAttributeTop
multiplier:1.0f
constant:-280.0f
];
}
else
{
constraint = [
NSLayoutConstraint
constraintWithItem:self.view
attribute:NSLayoutAttributeTop
relatedBy:NSLayoutRelationEqual
toItem:self.backgroundImage
attribute:NSLayoutAttributeTop
multiplier:1.0f
constant:-200.0f
];
}
[self.view
4000
addConstraint:constraint];
}
从上面的代码中你就可以看出,做法就是判断是横屏还是竖屏,然后给self.view(也就是根view)加一个约束,距离imageView 280。
当转屏时,就会调用这个方法,然后重新设置imageview的位置,从而达到了需求。
IB中不能设置,只好在代码中设置了。因为每次转屏时都会调用viewWillLayoutSubviews,所以在这个方法里设置就可以,具体方法是:
-(void)viewWillLayoutSubviews
{
if (constraint) {
[self.view
removeConstraint:constraint];
}
if ([UIApplication
sharedApplication].statusBarOrientation ==
UIDeviceOrientationPortrait || [UIApplication
sharedApplication].statusBarOrientation ==
UIDeviceOrientationPortraitUpsideDown)
{
constraint = [
NSLayoutConstraint
constraintWithItem:self.view
attribute:NSLayoutAttributeTop
relatedBy:NSLayoutRelationEqual
toItem:self.backgroundImage
attribute:NSLayoutAttributeTop
multiplier:1.0f
constant:-280.0f
];
}
else
{
constraint = [
NSLayoutConstraint
constraintWithItem:self.view
attribute:NSLayoutAttributeTop
relatedBy:NSLayoutRelationEqual
toItem:self.backgroundImage
attribute:NSLayoutAttributeTop
multiplier:1.0f
constant:-200.0f
];
}
[self.view
4000
addConstraint:constraint];
}
从上面的代码中你就可以看出,做法就是判断是横屏还是竖屏,然后给self.view(也就是根view)加一个约束,距离imageView 280。
当转屏时,就会调用这个方法,然后重新设置imageview的位置,从而达到了需求。
相关文章推荐
- UIView控件 、 autolayout 、transform属性及如何修改控件的位置和尺寸
- XCode5 使用AutoLayout情况下改变控件的 方法
- 使用AutoLayout布局适配时,如何提前获得AutoLayout完成适配后的子控件的真实frame
- 如何改变VC中控件间的TAB切换顺序
- iOS autolayout进阶教程,实现视频播放时,横竖屏的自动切换-适配iOS8 sizeClass 和之前的版本
- 【转】如何改变VC中控件间的TAB切换顺序
- 如何改变VC中控件间的TAB切换顺序
- 【mark】如何改变VC中控件间的TAB切换顺序
- 使用AutoLayout布局适配时,如何提前获得AutoLayout完成适配后的子控件的真实frame
- 使用AutoLayout布局适配时,如何提前获得AutoLayout完成适配后的子控件的真实frame
- 悬浮的view在横竖屏切换时如何改变大小?
- iOS 使用LayoutGuide 来限制控件的位置,配合Auto Layout constraints
- winform中,如何控制控件位置随窗体的大小改变而改变
- [转载]如何改变VC中控件间的TAB切换顺序
- winform中,如何控制控件位置随窗体的大小改变而改变
- 使用addView方法时,如何保持已有动态控件位置不被改变
- 使用AutoLayout布局适配时,如何提前获得AutoLayout完成适配后的子控件的真实frame
- 横竖屏切换时如何在代码中动态修改位置属性.txt
- AutoLayout适配时,如何获得AutoLayout完成适配后的子控件的真实frame
- 如何改变TableLayoutPanel中之控件间的距离