2017-03-02 48 views
1

我想在tableview單元格內使用stackview。我的堆棧視圖有兩個水平對齊的標籤。我已經在IB中添加了一個尺寸類覆蓋,以便爲緊湊寬度垂直對齊標籤。在uitableviewcell中使用uistackviews

標籤的定位確實如預期的變化,但細胞的高度是不正確,直到我滾動細胞並重新在

我的表視圖指定使用計算單元的高度:

// Automatic row height calculation 
    tableView.rowHeight = UITableViewAutomaticDimension 
    tableView.estimatedRowHeight = 68.0 // set to whatever your "average" cell height is 

因此,在iPhone SE中,我希望標籤並排排列在橫向上,但縱向排列的是另一張。如果我以縱向模式啓動我的應用程序,標籤就如預期的那樣,但是當我旋轉到橫向時,它們並排移動,但單元格仍然具有縱向高度。如果我從屏幕上滾動單元格,那麼單元格高度就會被修正。

我錯過了什麼?

請幫忙。

謝謝。

+0

我想我會放棄嘗試在tableview單元格中使用大小類的堆棧視圖。我能夠在Xcode 8中實現與「改變特性」相同的效果。這基本上意味着我在基於大小類的UI元素上安裝和卸載約束。一個堆棧視圖會使這容易很多;具體而言,只需更改對齊屬性即可將標籤從水平變爲垂直對齊,而無需安裝和卸載少量約束。 Stackviews很容易採用,所以我會重新考慮,如果我得到一些新的信息。 – Phantom59

回答

1

好的。看起來可能有一個合法的bug,但我繼續做一些挖掘工作,因爲stackviews更容易處理。最後,在https://www.raywenderlich.com得到了答案。

override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) { 
    DispatchQueue.main.async { 
    self.tableView.beginUpdates() 
    self.tableView.endUpdates() 
    } 
} 

Yeap !,在主隊列中異步封裝開始/結束更新調用,可以正確計算單元格的高度。永遠不會想到它,因爲traitCollectionDidChange()已經在主隊列中運行。

詳情請參閱Using uistackviews in uitableviewcell

謝謝,傑瑞!