您好我是TRUE
的新用户和我的主要true
我已使用自动布局以编程方式添加了两个Ios
。
这里我的主要问题是当我将方向从纵向更改为横向时,我希望清除约束并再次添加它们。
为此,我编写了下面的代码,但是我不明白为什么在更改方向时不应用自动布局。
有人可以帮我吗?
ViewController
答案 0 :(得分:0)
你有几个问题。在应用自动布局约束时,您还要添加MainView
和SubView
。
我不确定你为什么要在那时添加这些子视图。
如果您只想更改约束,则添加子视图不应该是该代码的一部分。
另一个可能的问题是您使用可视格式语言。我发现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];
}