Ios 以编程方式在ViewDid出现之前定位UIView

Ios 以编程方式在ViewDid出现之前定位UIView,ios,objective-c,cocoa-touch,Ios,Objective C,Cocoa Touch,我有两种观点。第一行包含数量可变的UIButton,这些UIButton可能会溢出到两行中。第二个需要放置在第一个的下方 我读过很多这样的帖子: 不幸的是,只有当您在viewdide:方法或更高版本中调用它们时,它们才起作用。这意味着从加载视图到正确定位图元之间的时间很短 我怎样才能优雅地解决这个问题 编辑1: 下面是一个简单的方法,我正在使用向下调整视图2 -(void)adjustView:(UIView *)view down:(int)down{ CGRect frame = v

我有两种观点。第一行包含数量可变的UIButton,这些UIButton可能会溢出到两行中。第二个需要放置在第一个的下方

我读过很多这样的帖子:

不幸的是,只有当您在
viewdide:
方法或更高版本中调用它们时,它们才起作用。这意味着从加载视图到正确定位图元之间的时间很短

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

编辑1: 下面是一个简单的方法,我正在使用向下调整视图2

-(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;
    }

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


(别忘了调用
super
!)

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


(别忘了调用
super
!)

人眼是否能意识到您的视图在这么短的时间内被移动了?我想说不是,但是如果您遇到相反的情况,您可以将这些视图的
hidden
属性设置为YES(在
viewdiload
)然后在
viewdide:
中将它们设置为nothidden(在设置它们的最终位置之后).

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

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


请检查苹果的文档

尝试使用
[self.view-bringsubview-front:firstView]
[self.view-sendsubview-toback:secondView]
或使用
didAddSubview


请检查苹果文档的

您是否查看了
视图显示
方法?这是在视图控制器的视图添加到窗口之前调用的,允许您在子视图可见之前对其进行布局。@AlexMDC我在ViewWillDisplay中遇到的问题与我在ViewDiLoad中遇到的问题完全相同。ViewDidDisplay中的方法与我在viewDidLoad中遇到的问题完全相同按预期工作。何时以及如何创建
ui按钮?是的,但何时在
viewDidLoad
中或在
viewdideappear
中调用
addButtonsToView:
您看过
viewwillbeen
方法吗?这是在视图控制器的视图添加到窗口之前调用的,允许您在子视图可见之前对其进行布局。@AlexMDC我在viewwillbeen中遇到的问题与我在viewDidLoad中遇到的问题完全相同。viewdidebeen中的相同方法按预期工作。何时以及如何解决创建您的
ui按钮
s?是的,但您何时在
viewDidLoad
viewDidAppear
中调用
addButtonsToView:
这两个都不适合我。请参见我的编辑1。我正在调用
super
,然后调用我的
adjustView
方法。有什么提示吗?“viewWillLayoutSubviews”是做这些事情的正确位置。你能描述一下“不工作”吗?它们是如何“不工作”的如果您的布局不太复杂,请考虑在<代码> Visual Dead Load 中使用<代码> AutoRebug掩码<代码>。90%的时间为我工作。这两个都不适用于我。请参阅我的编辑1。我正在调用<代码>超级< /代码>,然后调用我的代码> ActudiVIEW/COD>方法。有什么提示吗?“VIEW WayLayOutSubVIEW”是正确的地方。事情。你能描述“不工作”吗?它们如何“不工作”?如果你的布局不太复杂,请考虑使用<代码>自动修复掩码< /代码> <代码> VIEWDIDLoad 。为我工作了90%的时间。