提问人:Anu 提问时间:11/16/2018 最后编辑:Anu 更新时间:11/17/2018 访问量:803
UITableViewAutomaticDimension 不起作用
UITableViewAutomaticDimension is not working
问:
我已将tableview的估计高度和高度设置为UIAutomaticDimension,但是我的标签高度增加了。
我尝试更改但仍然不起作用。label.preferredMaxLayoutWidth
我已将tableview的估计高度和高度设置为UIAutomaticDimension,但是我的标签高度增加了。
我尝试更改但仍然不起作用。label.preferredMaxLayoutWidth
func numberOfSections(in tableView: UITableView) -> int { 返回 1 }
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if let buildingArr = buildingViolationArray {
return buildingArr.count
}
return 0
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: Language.sharedInstance.isEnglish ? "CELL" : "CELL_AR", for: indexPath) as! BuildingViolationHeaderTableViewCell
if let buildingViolationsDict = buildingViolationArray?[indexPath.row] {
cell.followUpNoLbl.text = buildingViolationsDict["followupNo"] as? String
cell.violationTypeLbl.text = buildingViolationsDict[Language.sharedInstance.isEnglish ? "violationType" : "violationTypeArb"] as? String
cell.bvBtn.addTarget(self, action: #selector(BuildinVioClicked), for: .touchUpInside)
if buildingViolationsDict[kIsSelectedKey] as? Bool == true {
cell.isCellSelected = true
let buildingVioView = getZoneRegView(buildingViolationsDict)
buildingVioView.tag = 1
for removeSubViews in cell.bvStackView.subviews {
removeSubViews.removeFromSuperview()
cell.bvStackView.removeArrangedSubview(removeSubViews)
}
cell.bvStackView.addArrangedSubview(buildingVioView)
cell.expandImage.image = UIImage(named: "minus-256")
} else {
cell.isCellSelected = false
for removeSubViews in cell.bvStackView.subviews {
removeSubViews.removeFromSuperview()
cell.bvStackView.removeArrangedSubview(removeSubViews)
}
cell.expandImage.image = UIImage(named: "plus-256")
}
cell.violationTypeLbl.preferredMaxLayoutWidth = cell.violationTypeLbl.frame.size.width
}
cell.selectionStyle = .none
return cell
}
func BuildinVioClicked(sender: UIButton){
let location = sender.convert(CGPoint.zero, to: bvTableView)
let indexPath = bvTableView.indexPathForRow(at: location)!
if var buildingViolationsDict = buildingViolationArray?[indexPath.row] {
if let isSelect = buildingViolationsDict[kIsSelectedKey] as? Bool, isSelect {
(buildingViolationArray[indexPath.row])[kIsSelectedKey] = false
} else {
(buildingViolationArray[indexPath.row])[kIsSelectedKey] = true
}
bvTableView.reloadData()
}
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return UITableViewAutomaticDimension
}
func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
return UITableViewAutomaticDimension
}
答:
0赞
Amadeu Real
11/17/2018
#1
除了设置 to (在 Swift 4 中,已重命名为 )。您应该正确设置单元格约束。estimatedRowHeight
UITableViewAutomaticDimension
UITableViewAutomaticDimension
UITableView.automaticDimension
class YourCell: UITableViewCell {
lazy var label: UILabel = {
let label = UILabel()
label.translatesAutoresizingMaskIntoConstraints = false
label.font = UIFont.systemFont(ofSize: 12)
label.numberOfLines = 0 // This property will allow the label according to his content
return label
}()
func addLabelIntoView() {
contentView.addSubview(label)
let margin = contentView.layoutMarginsGuide
NSLayoutConstraint.activate([
label.leadingAnchor.constraint(equalTo: margin.leadingAnchor),
label.trailingAnchor.constraint(equalTo: margin.trailingAnchor),
label.topAnchor.constraint(equalTo: margin.topAnchor),
label.bottomAnchor.constraint(equalTo: margin.bottomAnchor) // Pins bottom of label into the bottom of the view
])
}
}
评论
UITableViewAutomaticDimension