混合AutoLayout和以编程方式创建的UI

时间:2016-06-15 14:15:26

标签: ios objective-c uiview uibutton autolayout

我在混合AutoLayout和以编程方式创建的布局时遇到了问题。

我在AutoLayout中有一个UIView(绿色框)。我有其他视图在这个场景中使用AutoLayout工作并依赖于自动布局,但为简单起见,我只显示问题区域。

根据应用程序的状态,某些按钮将放置在绿色的UIView中。我通过读取UIView的大小来计算按钮的大小,知道按钮之间我想要多少空间,最后将该数字除以多少按钮。这似乎不是问题。

虽然当我调出视图时,会发生这种情况:

enter image description here

但是如果重新加载/刷新视图,它就可以正常工作。

enter image description here

只有在初始加载时,视图才会搞砸。

在不同状态下输出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等中。

有人有任何建议吗?

0 个答案:

没有答案