我在混合AutoLayout和以编程方式创建的布局时遇到了问题。
我在AutoLayout中有一个UIView(绿色框)。我有其他视图在这个场景中使用AutoLayout工作并依赖于自动布局,但为简单起见,我只显示问题区域。
根据应用程序的状态,某些按钮将放置在绿色的UIView中。我通过读取UIView的大小来计算按钮的大小,知道按钮之间我想要多少空间,最后将该数字除以多少按钮。这似乎不是问题。
虽然当我调出视图时,会发生这种情况:
但是如果重新加载/刷新视图,它就可以正常工作。
只有在初始加载时,视图才会搞砸。
在不同状态下输出UIView大小:
初始加载
UIView Size: {240, 128}
重新加载(返回屏幕或刷新数据 这是正确的尺寸
UIView Size: {288, 31}
我在ViewDidLoad
方法
- (void) buildButtonGUI {
//Show generic code
somebutton = [UIButton buttonWithType:UIButtonTypeCustom];
[somebutton addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside];
[somebutton setTitle:@"ONE" forState:UIControlStateNormal];
somebutton.frame = CGRectMake(0, 0, 0, 0);
somebutton.backgroundColor = [UIColor darkGrayColor];
[somebutton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
[self.viewStatus addSubview:somebutton];
etc..
}
然后程序逻辑接管 [self doLogic] ,我隐藏/显示按钮,并根据我调用buildButtonGUI后发生的逻辑调整大小
- (void) doLogic {
//Do something with all the buttons and calculate the size needed
somebutton.frame = CGRectMake(StartXPos, 0, someCalculated.size.width, someCalculated.size.height);
somebutton.enabled = true;
somebutton.hidden = false;
etc..
}
我已经尝试了很多不同的选项,将我的 [self doLogic] 放在viewWillAppear和viewHasAppeared等中。
有人有任何建议吗?