修复UITableView中第一行的宽高比

时间:2015-10-31 02:42:01

标签: ios iphone swift uitableview

我正在创建一个屏幕,想象一下facebook个人资料屏幕..一个tableview,第一个单元格是一个图像。目标是这个图像保持纵横比,所以对于不同的屏幕尺寸,我不必担心它的大小..

我无法使用任何视图,即使我设置了特定的约束,单元格也不会设置正确的高度。

我在这个链接中有一个显示约束的项目..

我的VC代码:

class ViewController: UITableViewController{

    override func viewDidLoad() {
        super.viewDidLoad()
        self.tableView.dataSource = self
        self.tableView.delegate = self
        self.tableView.estimatedRowHeight = 100
        self.tableView.rowHeight = UITableViewAutomaticDimension

        self.tableView.reloadData()
    }

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath)
        return cell
    }

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 1
    }
}

我的约束: enter image description here

2 个答案:

答案 0 :(得分:1)

这是你应该做的:

  1. 插入表格视图标题视图
  2. 更新帧高度,在viewWillLayoutSubviews功能中保持所需的宽高比。
  3. enter image description here

    class ViewController: UITableViewController {
    
        @IBOutlet weak var headerView: UIView!
    
        override func viewWillLayoutSubviews() {
            var frame = headerView.frame;
            // Check and see if the aspect ratio of the frame
            // of the header view is the desired aspect ratio.
            if frame.size.height != frame.width * 0.5 {
                // If it is not, update the frame
                frame.size.height = frame.width * 0.5;
                headerView.frame = frame;
                // reset the header view
                self.tableView.tableHeaderView = headerView
            }
        }
    }
    

答案 1 :(得分:1)

如果表格视图单元格的高度基本上是表格视图宽度的函数,则可能更容易实现heightForRowAtIndexPath委托方法以返回表格视图的宽度乘以所需的比率。这将完全取消图片中的约束,并且可能更有效。