如何首先在表格单元格上放置固定高度?

时间:2019-05-02 20:32:15

标签: ios swift uitableview

如何在单元格上固定高度而不影响单元格的大小?我想出了如何调整表格单元格的大小,但是当我想放一个按钮看起来很小时,我想先在单元格上放一个固定的大小高度,然后一旦内容变大,就应该遵循resize方法。 这些是调整大小的方法。 预先谢谢你

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    return UITableView.automaticDimension
}

func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
    return 40
}

     NSLayoutConstraint.activate([
        textView.topAnchor.constraint(equalTo: self.topAnchor, constant: 10),
        textView.bottomAnchor.constraint(equalTo: self.bottomAnchor, constant: -10),
        textView.leadingAnchor.constraint(equalTo: self.leadingAnchor, constant: 10),
        textView.trailingAnchor.constraint(equalTo: self.trailingAnchor, constant: -10)
        ])

     NSLayoutConstraint.activate([
        button.topAnchor.constraint(equalTo: textView.bottomAnchor, constant: 50),
        button.bottomAnchor.constraint(equalTo: self.bottomAnchor),
        button.leftAnchor.constraint(equalTo: self.leftAnchor, constant: 20),
        button.widthAnchor.constraint(equalToConstant: 20),
        button.heightAnchor.constraint(equalToConstant: 10)
        ])

5 个答案:

答案 0 :(得分:1)

将按钮的底部constraint设置为单元格constraint的底部contentViewautolayout将自动管理像元高度。

答案 1 :(得分:0)

UITableView的默认行为将自行处理。

确保没有为表视图设置任何自定义设置。第二件事是UITableViewCell,您需要为每个UI组件指定高度-这将允许UITableView正确调整单元格的大小。

Edit.1

如果要通过xib / storyboard创建视图控制器,则只需要对tableView执行此操作(注意,单元格是从nib加载的,并且视图控制器符合UITableViewDataSource

override func viewDidLoad() {
    super.viewDidLoad()
    tableView.dataSource = self
    tableView.register(UINib(nibName: "YourCellNibName", bundle: nil), forCellReuseIdentifier: "reuseIdentifier")
}

答案 2 :(得分:0)

由于这三个限制因素,您身高出现冲突

 textView.bottomAnchor.constraint(equalTo: self.bottomAnchor, constant: -10),
 button.topAnchor.constraint(equalTo: textView.bottomAnchor, constant: 50),
 button.bottomAnchor.constraint(equalTo: self.bottomAnchor),

您还需要将textView&按钮添加到contentView并设置约束条件

 NSLayoutConstraint.activate([
    textView.topAnchor.constraint(equalTo: self.contentView.topAnchor, constant: 10), 
    textView.leadingAnchor.constraint(equalTo:self.contentView.leadingAnchor, constant: 10),
    textView.trailingAnchor.constraint(equalTo:self.contentView.trailingAnchor, constant: -10), 
    textView.heightAnchor.constraint(equalToConstant:50),

    button.topAnchor.constraint(equalTo: self.textView.bottomAnchor, constant: 50),
    button.bottomAnchor.constraint(equalTo: self.contentView.bottomAnchor),
    button.leftAnchor.constraint(equalTo:self.contentView.leftAnchor, constant: 20),
    button.widthAnchor.constraint(equalToConstant: 20),
    button.heightAnchor.constraint(equalToConstant: 10)
])

答案 3 :(得分:0)

您可以执行以下操作。

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    if indexPath.row == 0 {     // First table cell
        if firstLoad {
            return 200  // Fixed height 
        } else {
            return UITableView.automaticDimension
        }
    }   
}

另外,您可能需要通过执行以下操作重新触发heightForRowAt方法

self.tableView.beginUpdates()
self.tableView.endUpdates()

希望有帮助!

答案 4 :(得分:0)

tableView.rowHeight = yourHeightValue定义为viewDidLoad()