2016-02-04 44 views
0

添加約束環路而在循環問題使用「addConstraint」上的UIButton與按鈕x位置來了,如何使用目標C

for (int ix = 0; ix<7; ix++) { 

     UIButton *segmentButton = [[UIButton alloc] init]; 
     [segmentButton setTitle:[_segmentButtonTitleArray objectAtIndex:ix] forState:UIControlStateNormal]; 
     [_segmentView addSubview:segmentButton]; 

      [segmentButton setTranslatesAutoresizingMaskIntoConstraints:NO]; 

      [_segmentView addConstraint:[NSLayoutConstraint constraintWithItem:segmentButton 
                    attribute:NSLayoutAttributeWidth 
                    relatedBy:NSLayoutRelationEqual 
                    toItem:_segmentView 
                    attribute:NSLayoutAttributeWidth 
                   multiplier:1.0/7 
                    constant:0]]; 
      [_segmentView addConstraint:[NSLayoutConstraint constraintWithItem:segmentButton 
                    attribute:NSLayoutAttributeHeight 
                    relatedBy:NSLayoutRelationEqual 
                    toItem:nil 
                    attribute:NSLayoutAttributeNotAnAttribute 
                   multiplier:1.0 
                    constant:segmentButton.frame.size.height]]; 

      [_segmentView addConstraint:[NSLayoutConstraint constraintWithItem:segmentButton 
                    attribute:NSLayoutAttributeLeft 
                    relatedBy:NSLayoutRelationEqual 
                     toItem:_segmentView 
                    attribute:NSLayoutAttributeLeft 
                    multiplier:1.0 
                     constant:segmentButtonXposition]]; 

      [_segmentView addConstraint:[NSLayoutConstraint constraintWithItem:segmentButton 
                    attribute:NSLayoutAttributeTop 
                    relatedBy:NSLayoutRelationEqual 
                     toItem:_segmentView 
                    attribute:NSLayoutAttributeTop 
                    multiplier:1.0 
                     constant:segmentButton.layer.frame.origin.y]]; 

     segmentButtonXposition = segmentButtonXposition +1+_segmentView.frame.size.width/7-1; 
    } 

一個期望的結果是這樣,但無法產生結果。

Desired Result

+0

你會得到什麼結果?你可以發佈正在製作的圖片嗎? –

+0

hi @GavinHope已經發布了圖片http://i.stack.imgur.com/bewjn.png。加載後獲取結果。但是在旋轉之後,它的寬度爲 –

+0

哦,所以初始加載會產生你想要的結果,但是如果你旋轉設備,你會得到錯誤的寬度?具體來說,如果從** portrait **旋轉到** landscape **,橫向是否保留縱向使用的* width *? –

回答

0

它肯定會旋轉後採取先前的寬度。瞭解如何計算約束的left屬性值;來自segmentVIew's的幀,您在旋轉之後沒有更新。

所以,如果我們說肖像取向你的計算來作爲768/7 = ~109。但是,對於橫向方向,此計算結果不正確,並且constraint.constant值應更新爲1024/7 = ~146。但你沒有這樣做,所以舊的價值正在被採納。

要解決此問題,可以在每次設備旋轉時更新每個約束。但是,這將是乏味的,因爲你需要爲每個約束有一個變量,然後遍歷所有的約束。

更好的方法是保持每個UILabel的寬度相等。

  1. EqualWidth每個拉布勒
  2. label1.leading = segmentView.leading
  3. label7.trainling = segmentView.trailing
  4. 標籤(n)的.trailing =標籤(N + 1).leading

僅供參考,請查看我的回答here。通過它應用於UIScrollView,但它會幫助你理解這個邏輯。我已經使用VFL來更簡潔。