2017-02-16 102 views
0

我有什麼:編程方式更改UIStackView的aligment不能正常工作

這是我的看法層次:

  • 一個按鈕,命名爲B1其中有一個名爲「changeAlignment」某個動作在觸摸內部時激活。
  • 一個名爲Pview的UIView框架(0,100,414,100)。
    • 一個名爲S1的水平UIStackView,其alignment屬性設置爲「center」。這個堆棧視圖已被固定到pView的邊界。
      • 一個名爲S2的水平UIStackView,其對齊屬性設置爲「填充」,並且內部有兩個標籤。

我想做的事:

我想S1的定位從 「中心」 到 「評出的」 改變,當我觸摸按鈕B1。

我試過

- (void) changeAlignment { 
    NSLog(@"P-%li",(long)S1.alignment); 
    S1.alignment = UIStackViewAlignmentTop; 
    NSLog(@"P-%li",(long)S1.alignment); 
    [pView layoutIfNeeded]; 
} 

這聽起來很明顯,但它不工作!。有趣的是,它在某個時間有效,但突然停止工作。現在當我點擊b1時,S1的對齊改變,但在視覺上它根本不會改變。

我試着用[self.view setNeedsLayout] [self.view layoutIfNeeded],甚至[S1 layoutIfNeeded],這一切都沒有工作。

我在做什麼錯了?? ..它甚至有可能實際上工作,並突然停止工作!! ??

任何人都可以請幫助我??這是讓我瘋狂。

+0

@coverback你能幫我解決這個問題嗎? – Airel

回答

0

我想這個答案和How to programmatically animate the alignment property of an UIStackView in ios 9一樣。 (1)一個堆棧視圖自動生成它需要的約束來佈置其排列的子視圖,(2)用另一個堆棧視圖S2定義水平堆棧視圖S1作爲S1的排列子視圖,當您將S1的alignment屬性從Center更改爲Top且反之亦然時,使S1創建一些約束(a)不受影響,(b)不會重新計算或(c)重新計算但保持不變。因此,由於自動生成的約束S1不受影響,或者在更改對齊屬性後根本不會改變,因此UI不會反映任何更改,也不會有任何動畫。如果有人想出另一種解釋,讓我知道它。