我正在尝试使用嵌入UINavigationControllers的2个容器视图为iPad构建自定义拆分视图控制器... 我设法做了所有这些,但我遇到了设置约束的问题,所以一切都很好地重新调整。
这是我到目前为止所做的:
我不能以详细视图(右侧容器)调整自身大小的方式调整主视图(左侧容器)的大小,以便在调整自身大小时消耗主视图留下的空间。所以我想这样结束:
在其他尝试中我尝试添加这些约束:
主容器:从顶部到父级,从左侧到父级,从底部到标签栏,高度,占位符宽度 detail容器:top to parent,left to master container,bottom to tabbar,right to parent,height,placeholder width
当我从代码调整主容器的大小时,细节控制器始终保持在原始位置。
我尝试了100个场景,但没有任何效果。
我正在做一些自动布局的根本错误但却无法弄清楚是什么......
这是调整大小的代码:
-(void)ShowMaster:(BOOL)bShow animated:(BOOL)bAnimated
{
CGRect frame = masterViewContainer.frame;
if(bShow){
frame.size.width = 280;
}
else{
frame.size.width = 50;
}
masterViewContainer.frame = frame;
}
非常感谢任何形式的帮助。
修改 好的,我取得了一些进展,用这个替换了我的调整大小代码:
-(void)ShowMaster:(BOOL)bShow animated:(BOOL)bAnimated
{
[UIView beginAnimations:@"" context:nil];
if(bShow){
[masterViewContainer addConstraint:[NSLayoutConstraint constraintWithItem:masterViewContainer
attribute:NSLayoutAttributeWidth
relatedBy:NSLayoutRelationEqual
toItem:masterViewContainer
attribute:NSLayoutAttributeWidth
multiplier:0.5
constant:280]];
}
else{
[masterViewContainer addConstraint:[NSLayoutConstraint constraintWithItem:masterViewContainer
attribute:NSLayoutAttributeWidth
relatedBy:NSLayoutRelationEqual
toItem:masterViewContainer
attribute:NSLayoutAttributeWidth
multiplier:0.5
constant:50]];
}
[UIView commitAnimations];
}
现在详细调整大小,但是当我尝试扩展master时,没有任何反应......
答案 0 :(得分:0)
试试这个:
-(void)viewDidLayoutSubviews {
//your code
}
答案 1 :(得分:0)
我解决了。在我的viewDidLoad中:
- (void)viewDidLoad
{
[super viewDidLoad];
if(masterWidthConstraint == nil){
masterWidthConstraint = [NSLayoutConstraint constraintWithItem:masterViewContainer
attribute:NSLayoutAttributeWidth
relatedBy:NSLayoutRelationEqual
toItem:masterViewContainer
attribute:NSLayoutAttributeWidth
multiplier:0.0
constant:280];
[masterViewContainer addConstraint:masterWidthConstraint];
}
}
在我的ShowMaster方法中,我只是更新了这个约束和动画,如下所示:
-(void)ShowMaster:(BOOL)bShow animated:(BOOL)bAnimated
{
[UIView beginAnimations:@"" context:nil];
if(bShow){
masterWidthConstraint.constant = 280;
}
else{
masterWidthConstraint.constant = 50;
}
[self.view setNeedsUpdateConstraints];
[UIView animateWithDuration:0.9 animations:^{
[self.view layoutIfNeeded];
} completion:^(BOOL finished){}];
}
在我的IB中,我设置占位符约束形式主视图宽度......它的工作原理。只有我不能做的是将IBOutlet设为IB宽度约束,并且无法找出原因,但它的工作方式就好了......