UITableViewCell列宽基于屏幕方向IOS Swift而变化

时间:2017-07-10 09:05:32

标签: ios swift uitableview screen-orientation

我需要在我开发的其中一个应用程序中制作下面的表格结构。我正在使用UITableView&创建这个表。我需要根据屏幕方向更改表格列宽度。我已经设置了列宽和范围的约束。我将使用 viewDidLoad()中的屏幕宽度为这些值指定值。

但是,当屏幕方向发生变化时,我无法弄清楚如何重新对齐这些约束。我发现当方向改变时会调用 viewWillTransition()&我重新计算了那个&为表视图调用setNeedsLayout()。但是,当更改屏幕方向时,我无法使表格视图重置表格列宽。我是IOS平台的新手,非常感谢任何帮助。

  

HDR_parName / HDR_parValue / HDR_minValue / HDR_maxValue

     

PARA1 / VALUE1 / minvalue1 / maxvalue1

     

PARA2 / VALUE2 / minvalue2 / maxvalue2

3 个答案:

答案 0 :(得分:3)

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框架大小设置元素大小。

答案 1 :(得分:1)

快捷键4

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
    super.viewWillTransition(to: size, with: 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?.yourTable.reloadData()
    }

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

    coordinator.animate(alongsideTransition: animationHandler, completion: completionHandler)

}

答案 2 :(得分:0)

这是一个非常简单的解决方案,你所做的是错误的。 考虑您希望全宽作为​​行宽。

您不必为单元格宽度设置任何约束,而是为您的tableview设置尾随约束。它将处理所有。

如果您仍然遇到类似问题,请尝试

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

如果您仍然面临这个问题,请告诉我。