2017-07-10 52 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 –