1

2 つの UIView があります。1 つ目は、 にオーバーフローする可能性のある可変数の UIButton を含みますtwo rows。2 番目は 1 番目の下に配置する必要があります。

私は次のような多くの投稿を読みました: 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

viewWillLayoutSubviewsまたはではないのはなぜviewDidLayoutSubviewsですか?それが私がいつも使っているものです。

(電話することを忘れないでくださいsuper!)

于 2013-06-22T19:16:39.443 に答える
0

人間の目は、あなたの視点がその短い時間で移動したことを認識することができますか? そうではないと思いますが、反対の場合はhidden、それらのビューのプロパティを YES に設定し (でviewDidLoad)、viewDidAppear:非表示に設定しないでください (最終的な位置を設定した後)。

于 2013-06-22T19:21:19.857 に答える