旋转时自动布局视图为全屏

时间:2013-11-20 04:18:29

标签: ios iphone objective-c autolayout avplayer

我正在写一个视频播放应用。该应用程序在纵向模式下观看视频下方的应用程序信息,但当应用程序转为横向时,我希望视频全屏显示。不幸的是,当应用程序转向横向时,底部视图会限制视频视图从顶部到底部一直扩展,即使我已将高度约束转换为优先级== 1.

人像模式: Portrait

景观模式: Landscape

我已经尝试隐藏了较低的视图,但是当我在旋转回到肖像时显示视图时,这会使整个布局失控,因为隐藏视图会破坏与视图相关的约束。

有没有办法可以让一个视图轻松占用整个屏幕并恢复到使用自动布局轻松实现的方式?

谢谢。

1 个答案:

答案 0 :(得分:2)

是的,有一种简单的方法,但你需要做一些数学运算。您可以使用乘数和常量属性将视频视图的高度与超级视图相关联。你可以有两个方程来定义你想要的东西,并解决变量。例如,假设您希望您的高度为225(纵向为568点),全高(320)(横向)。这给了你这两个方程(用文字说,方程式说,“我希望我的身高等于自我。视图的高度乘以乘数加常数”):

225 = 568m +常数,320 = 320m +常数

如果求解这两个方程式,则m为-0.3831,常数为442.6。 因此,在IB中,您应该为视频视图提供高度约束,并为其创建IBOutlet。其他视图也可以有高度约束(但可能有其他方法),但重要的是你希望它们彼此之间有垂直间距约束,因此它们被绑在一起,并且没有约束到视图的底部。这样,当视频视图扩展时,它会将其他两个视图从屏幕上移开。在代码中,您可以这样做:

- (void)viewDidLoad {
    [super viewDidLoad];
    [self.topView removeConstraint:self.heightCon];
    [self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.topView attribute:NSLayoutAttributeHeight relatedBy:0 toItem:self.view attribute:NSLayoutAttributeHeight multiplier:-.3831 constant:442.6]];
}

heightCon是我对topView(您的视频视图)高度限制的出口。我们删除它,然后将其替换为self.view中的一个正确关联两个高度。如果您同时支持两种屏幕尺寸,则必须在第一个等式中使用480而不是568来求解方程式,并根据设备添加正确的约束。旋转时无需做任何事情,约束系统会自动处理。