我正在为项目使用故事板。
我有一个顶部菜单,其中包含3个按钮(UIView
,其中包含3个UIButton
),它们之间的距离相同。
我想将此菜单拉伸到旋转时的最大宽度,并增加按钮之间的距离。
我做了以下事情:
- (void) didRotateFromInterfaceOrientation:(UIInterfaceOrientation)orientation {
[super didRotateFromInterfaceOrientation:orientation];
UIDeviceOrientation deviceOrientation = [UIDevice currentDevice].orientation;
if (UIDeviceOrientationIsLandscape(deviceOrientation)){
[self prepareLandscapeLayout];
}
}
- (void) prepareLandscapeLayout {
[[self topMenu] setFrame:CGRectMake(0, 0, IS_IPHONE_5 ? 568 : 480, 59)];
[[self cameraButton] setCenter:CGPointMake(232, 26)];
[[self settingsButton] setCenter:CGPointMake(288, 26)];
[[self videoList] setCenter:CGPointMake(340, 26)];
}
旋转后调用prepareLandscapeLayout
函数,但按钮保持在原始位置。我还可以看到topMenu
在旋转后如何伸展(我已经改变了背景颜色)。
对于我可能做错的事情有什么想法吗?
答案 0 :(得分:1)
只要您不想使用故事板设计进行轮换和约束,就应该停止使用“Autolayout”
在故事板右侧窗格的任何控制器中查看Interface Builder Document
。
答案 1 :(得分:0)
中心相对于其原始方向,并根据框架计算(也相对于原始方向)。
相反,请尝试将帧更改为相对于父视图的边界(基于方向更新)。
答案 2 :(得分:0)
如果topMenu的帧正在改变,则写为。
- (void) prepareLandscapeLayout
{
[[self topMenu] setFrame:CGRectMake(0, 0, IS_IPHONE_5 ? 568 : 480, 59)];
[[self cameraButton] setFrame:CGRectMake(0,0,actualWidth,actualHeight)];
[[self settingsButton] setFrame:CGRectMake(topMenu.frame.size.width/3,0,actualWidth,actualHeight)];
[[self videoList] setFrame:CGRectMake((topMenu.frame.size.width/3)*2,0,actualWidth,actualHeight)];
}