在viewDidAppear之前以编程方式定位UIView

时间:2013-06-22 19:12:20

标签: ios objective-c cocoa-touch

我有两个UIViews。第一个包含可变数量的UIButton,它们可能溢出到two rows。第二个需要位于第一个之下。

我看过很多这样的帖子:How to position a UIView?

不幸的是,如果您使用viewDidAppear:方法或稍后方法调用它们,这些似乎只能起作用。这意味着我的视图加载和元素正确定位之间的时间很短。

我怎样才能优雅地解决这个问题?

编辑1: 这是一个简单的方法,我正在使用adjust view2向下

-(void)adjustView:(UIView *)view down:(int)down{
    CGRect frame = view.frame;
    frame.origin.y = frame.origin.y + down;
    view.frame = frame;
    }

编辑2: 这就像我如何添加我的按钮,调整我的第一个视图,以及计算下一个需要下降的距离

- (void)addButtonsToView:(NSArray *)buttonStrings {
    //To correctly position
    float previousTagsWidth = 0.0;
    self.adjustDown = 0.0;

    for (NSString *str in buttonStrings) {      
        UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
        [button setTitle:str forState:(UIControlState)UIControlStateNormal];

        CGSize size = [str sizeWithFont:TAG_FONT];
        if (previousTagsWidth + size.width > 300) {
            previousTagsWidth = 0;
            self.adjustDown += size.height+10;
            }

        button.frame = CGRectMake(previousTagsWidth, self.adjustDown, size.width+10, size.height+5);
        previousTagsWidth += size.width+20;

        [self.view1 addSubview:button];
        }
    CGRect frame = self.view1.frame;
    frame.size.height = frame.size.height+self.adjustDown;
    self.view1.frame = frame;
    }

3 个答案:

答案 0 :(得分:5)

为什么不在viewWillLayoutSubviewsviewDidLayoutSubviews?这就是我一直用的东西。

(别忘了拨打super!)

答案 1 :(得分:0)

人眼是否有可能意识到您的观点在这么短的时间内被移动了?我会说它不是,但是如果您遇到相反的情况,您可以将这些视图的hidden属性设置为YES(在viewDidLoad中),然后在viewDidAppear:中将它们设置为不隐藏(在设定最终职位后)。

答案 2 :(得分:0)

尝试使用[self.view bringSubviewToFront:firstView][self.view sendSubviewToBack:secondView]或使用didAddSubview

请查看UIView Class Reference

的苹果文件