2017-07-10 98 views
1

我需要在我正在開發的其中一個應用程序中創建類似結構的表格。我使用UITableView創建這個表格&我需要我的表格列寬度根據屏幕方向進行更改。我對列寬設置了約束條件&我將使用我的viewDidLoad()中的屏幕寬度爲這些值分配值。基於屏幕方向的UITableViewCell列寬度變化IOS Swift

但是,我無法弄清楚如何在屏幕方向更改時重新對齊這些約束。我計算出viewWillTransition()將在方向更改時調用&我重新計算了表視圖中名爲setNeedsLayout()的那個&中的約束。但是,當屏幕方向更改時,我無法使表格視圖重置表格列寬度。我是IOS平臺的新手,任何幫助將不勝感激。

HDR_parName/HDR_parValue/HDR_minValue/HDR_maxValue

PARA1 /值1/minvalue1/maxvalue1

PARA2 /值2/minvalue2/maxvalue2

+0

您是否添加了'tableview'' width'約束? – Subramanian

+0

是的,我設置故事板的寬度約束爲參數表View.leading = leadingMargin + 10和trailingMargin =參數表View.trailing + 10 –

+0

你說的改變寬度基於ORIENTATION像肖像或風景模式?但在下面的評論中,您似乎想要根據單元格的索引位置更改寬度?你需要什麼**完全**? –

回答

0
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) { 
    super.viewWillTransitionToSize(size, withTransitionCoordinator: coordinator) 

    let animationHandler: ((UIViewControllerTransitionCoordinatorContext) -> Void) = { [weak self] (context) in 
     // This block will be called several times during rotation, 
     // so if you want your tableView change more smooth reload it here too. 
     self?.tableView.reloadData() 
    } 

    let completionHandler: ((UIViewControllerTransitionCoordinatorContext) -> Void) = { [weak self] (context) in 
     // This block will be called when rotation will be completed 
     self?.tableView.reloadData() 
    } 

    coordinator.animateAlongsideTransition(animationHandler, completion: completionHandler) 

} 

然後調用tableView數據源和委託方法,您可以在其中根據tableView框架大小設置元素大小。

+0

它的工作!!,謝謝:-) –

0

這是很簡單的解決方案,你是什麼做錯了。 考慮你想要全寬作爲你的行寬。

您不必爲單元格寬度設置任何約束,而是將尾隨約束設置爲您的tableview。它將處理所有。

如果你仍然面臨着類似的問題,然後再嘗試

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) { 
    self.view.layoutIfNeeded() 
} 

讓我知道,如果你仍然面臨的問題。

+0

感謝您的迴應Dev。我需要根據屏幕寬度更改表格視圖單元格內的列寬。對於例如第一列的寬度應爲屏幕寬度的10%左右,第二列寬度應爲屏幕寬度的20%等。因此,如果屏幕寬度在方向更改後發生改變,如何重新佈置我的表格視圖? –

+0

應用上述解決方案來更新旋轉後的視圖。 –

+0

,但是如果你想讓第一個20%第二的單元格寬度爲10%,那麼我建議你使用UICOllectionview。這將很容易與UICOllectionview –