1

我有两个 UIView。第一个包含可变数量的 UIButtons,它们可能会溢出到two rows. 第二个需要位于第一个下方。

我读过很多这样的帖子:如何定位 UIView?

不幸的是,这些似乎只有在您在viewDidAppear:方法中或以后调用它们时才有效。这意味着在我的视图加载和我的元素正确定位之间有很短的时间。

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

编辑1:这是我使用向下调整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;
    }
4

3 回答 3

5

为什么不在viewWillLayoutSubviewsor中viewDidLayoutSubviews?这就是我一直使用的。

(别忘了打电话super!)

于 2013-06-22T19:16:39.443 回答
0

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

请查看UIView 类参考的苹果文档

于 2013-06-22T20:08:43.407 回答
0

人眼有没有可能在那么短的时间内意识到你的观点发生了变化?我会说不是,但是如果您遇到相反的情况,您可以将hidden这些视图的属性设置为 YES(in viewDidLoad),然后viewDidAppear:将它们设置为不隐藏(在设置它们的最终位置之后)。

于 2013-06-22T19:21:19.857 回答