如何使用Objective C基于设备方向更改UIView约束?

时间:2015-12-10 12:47:18

标签: ios objective-c iphone uiview

我正在尝试使用iOSstoryboard的多个视图创建portrait landscape。我创建的所有内容都是故事板constraintsautolayout

现在我的问题是肖像我需要像下面的肖像图像一样显示。多数民众赞成我使用故事板约束。

对于风景需要显示First View (red)和底栏只有其他我隐藏的硬编码。但我不知道如何将红色屏幕第一视图全高度扩展到底部条形顶部。

注意:这是Universal App。

- (void) orientationChanged:(NSNotification *)note
{
    UIDevice * device = note.object;
    switch(device.orientation)
    {
        case UIDeviceOrientationPortrait:
            /* start special animation */
            NSLog(@"Portrait");
            self.namelist_tableview.hidden = NO;// ORANGE VIEW
            break;

        case UIDeviceOrientationLandscapeRight:
            /* start special animation */
            NSLog(@"Landscape");
            self.namelist_tableview.hidden = YES;// ORANGE VIEW
            break;

        case UIDeviceOrientationLandscapeLeft:
            /* start special animation */
            NSLog(@"Landscape");
            self.namelist_tableview.hidden = YES;// ORANGE VIEW
            break;

        default:
            break;
    };
}

enter image description here

4 个答案:

答案 0 :(得分:1)

您可以添加红色视图高度约束,将其存储在UIViewController中。 当设备的方向改变时。如果是纵向,则将视图高度约束设置为您要设置的时间长度,并将横向设置红色视图高度约束设置为初始值。

答案 1 :(得分:1)

如果使用尺寸等级,可以轻松完成。

对横向模式下您不想要的视图使用cmd + delete。并相应地设置其他视图。

DISPLAY IMAGE 1

DISPLAY IMAGE 2

答案 2 :(得分:1)

非常简单,在intefacebuilder中为纵向模式添加约束,  为横向模式添加约束。 接下来为所有约束做出一个出口。 在设备更改方向事件中执行此操作

如果您处于横向模式

+将纵向的活动约束设置为false(constraint.active = NO)

+将landscape的约束激活设置为true(constraint.active = YES)

如果您处于纵向模式

+将横向约束的活动设置为false(constraint.active = NO)

+将纵向约束的活动设置为true(constraint.active = YES)

答案 3 :(得分:0)

如果您没有修复红色视图的高度,则可以执行以下操作:

创建黄色视图的高度约束实例,如

  

步骤1:像我一样选择身高限制   enter image description here

-

  

步骤2:在您查看控制器界面中创建实例   enter image description here

之后,将以下代码行写入orientationChanged:方法 self.heightConstarintYelloView.constant = 0.f;

它会将黄色框高度设置为零,由于红色视图和黄色视图之间的垂直间距,红色视图将会扩展。