UIView重新调整旋转

时间:2013-11-19 19:46:33

标签: ios objective-c layout

我正在为项目使用故事板。 我有一个顶部菜单,其中包含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在旋转后如何伸展(我已经改变了背景颜色)。

对于我可能做错的事情有什么想法吗?

3 个答案:

答案 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)];
}