当我在Ios中更改模拟器方向时,自动布局不适用

时间:2015-11-19 04:33:15

标签: ios objective-c ios-autolayout

您好我是TRUE的新用户和我的主要true我已使用自动布局以编程方式添加了两个Ios

这里我的主要问题是当我将方向从纵向更改为横向时,我希望清除约束并再次添加它们。

为此,我编写了下面的代码,但是我不明白为什么在更改方向时不应用自动布局。

有人可以帮我吗?

我的代码: -

ViewController

1 个答案:

答案 0 :(得分:0)

你有几个问题。在应用自动布局约束时,您还要添加MainViewSubView

我不确定你为什么要在那时添加这些子视图。

如果您只想更改约束,则添加子视图不应该是该代码的一部分。

另一个可能的问题是您使用可视格式语言。我发现VFL与编写自动布局约束的完整形式相比是不可靠的。

以下是一些有助于纠正这些问题的更改。

AppyingAutolayouts

移动以下代码
MainView = [[UIView alloc] init];
MainView.backgroundColor = [UIColor orangeColor];
MainView.translatesAutoresizingMaskIntoConstraints = NO;
[self.view addSubview:MainView];

SubView = [[UIView alloc] init];
SubView.backgroundColor = [UIColor lightGrayColor];
SubView.translatesAutoresizingMaskIntoConstraints = NO;
[self.view addSubview:SubView];

进入viewDidLoad:

willAnimateRotationToInterfaceOrientation:duration:中进行以下更改

-(void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{

    if(toInterfaceOrientation == UIInterfaceOrientationPortrait){
        NSLog(@"portrait");

        [self AppyingAutolayoutsPortrait];
    }

    else if(toInterfaceOrientation == UIInterfaceOrientationLandscapeRight) {
        NSLog(@"LandscapeRight");

        [self AppyingAutolayoutsLandscapeRight];
    }

    else if(toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft) {
        NSLog(@"LandscapeLeft");

        [self AppyingAutolayoutsLandscapeLeft];
    }
}
  

请注意,willAnimateRotationToInterfaceOrientation:duration:已弃用,您应该使用viewWillTransitionToSize:withTransitionCoordinator:

为AppyingAutolayoutsPortrait制作三个新方法,AppyingAutolayoutsLandscapeRight,AppyingAutolayoutsLandscapeLeft并删除AppyingAutolayouts。

每种方法应如下所示:

-(void) AppyingAutolayoutsX {

     [self.view removeConstraints:self.view.constraints];

     // Add your constraints here.

     [self.view setNeedsLayout];
}