2013-06-22 22 views
1

我有兩個UIViews。第一個包含可能溢出到two rows的可變數量的UIButton。第二個需要定位在第一個之下。以編程方式定位UIView之前viewDidAppear

我看了很多帖子是這樣的:How to position a UIView?

不幸的是,這些似乎如果在viewDidAppear:方法或以後打電話給他們,只是工作。這意味着我的視圖加載時間和我的元素正確定位之間的時間很短。

我該如何優雅地解決這個問題?

編輯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; 
    } 
+0

蘋果文件你看了'viewWillAppear'方法?這是在視圖控制器的視圖添加到窗口之前調用的,並允許您在子視圖變爲可見之前對其進行佈局。 –

+0

@AlexMDC在viewWillAppear中,我和viewDidLoad中的問題完全相同。 viewDidAppear中的相同確切方法按預期工作。 – scottmrogowski

+0

什麼時候以及如何創建你的UIButton? – Cyrille

回答

5

爲什麼不viewWillLayoutSubviewsviewDidLayoutSubviews?這就是我一直使用的。

(不要忘記調用super!)

+0

這些都不適合我。查看我的編輯1.我打電話給'super',然後調用我的'adjustView'方法。有小費嗎? – scottmrogowski

+0

'viewWillLayoutSubviews'是做這種事情的好地方。你能描述「不工作」嗎?他們如何「不工作」? –

+0

另外,如果您的佈局不太複雜,請考慮在'viewDidLoad'中使用'autoresizingMask'。 90%的時間爲我工作。 –

0

是否有可能對人眼認識到,你的意見是在如此短的時間週期的移動?我會說這不是,但如果你遇到了相反的情況,你可以將這些視圖的hidden屬性設置爲YES(在viewDidLoad),然後在viewDidAppear:中將它們設置爲不隱藏(在設置它們的最終位置之後)。

0

嘗試使用[self.view bringSubviewToFront:firstView][self.view sendSubviewToBack:secondView]或使用didAddSubview

請檢查UIView Class Reference

相關問題