基本上我有一个表格视图,其中包含来自文档文件夹的文件数组。到目前为止,我已经设法根据文本标签的大小来调整单元格的高度:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
float height = 30;// y value of dataLabel
CGRect labelRect = [[directoryContents objectAtIndex:indexPath.row]
boundingRectWithSize:CGSizeMake(tableView.frame.size.width-15, 0)
options:NSStringDrawingUsesLineFragmentOrigin
attributes:@{NSFontAttributeName : [UIFont systemFontOfSize:15]}
context:nil];
height=height+labelRect.size.height+30;
return height;
}
如果cell.textLabel以1行或2行开始,那就很好并相应地显示。但是,当我点击导航栏中的编辑按钮以显示编辑模式时,如果cell.textLabel曾经是1行并且由于空间缩小而下降到2行,则单元格不会调整并且会被剪切靠细胞边界。
我如何阻止这种情况发生?
更新图片:
被召唤:
- (void)setEditing:(BOOL)editing animated:(BOOL)animated {
[super setEditing:editing animated:animated];
[self.tableView beginUpdates];
[self.tableView endUpdates];
}
任何帮助将不胜感激。谢谢。
答案 0 :(得分:1)
boundingRectWithSize:
值是标签可能存在的最大尺寸。目前您将此设置为所需的宽度确定,但零高度!这可能是个问题。
请将此0
替换为CGFLOAT_MAX
,如此
CGRect labelRect = [[directoryContents objectAtIndex:indexPath.row]
boundingRectWithSize:CGSizeMake(self.view.frame.size.width-15, CGFLOAT_MAX)
options:NSStringDrawingUsesLineFragmentOrigin
attributes:@{NSFontAttributeName : [UIFont systemFontOfSize:15]}
context:nil];
除此之外,请确保正确配置约束 配置,因为每个边距离都是 top ,l < em> eft,right 和 bottom 相应的对象被固定。 (和单元格中的任何其他对象正确约束),这样当单元格高度调整得更大时,保持文本的UILabel
会根据这些值进行拉伸,因此您可以看到所有文本< / p>
我希望这会有所帮助
答案 1 :(得分:0)
如果我们希望在选择模式下进行编辑时,单元格内容向右移动,那么只要我们使用具有动态高度的单元格,UITableViewCell子类中的此代码就可以正常工作:
class UITableViewCellSubclass {
var contentViewSubviewTrailingConstraint: NSLayoutContraint?
public override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
initializeViews()
}
private func initializeViews() {
contentViewSubview.translatesAutoresizingMaskIntoConstraints = false
contentView.addSubview(contentViewSubview)
contentViewSubviewTrailingConstraint = contentViewSubview.trailingAnchor.constraint(equalTo: contentView.trailingAnchor)
NSLayoutConstraint.activate([
contentViewSubview.topAnchor.constraint(equalTo: contentView.topAnchor),
contentViewSubview.leadingAnchor.constraint(equalTo: contentView.leadingAnchor),
contentViewSubviewTrailingConstraint ?? stackView.trailingAnchor.constraint(equalTo: contentView.trailingAnchor),
contentViewSubview.bottomAnchor.constraint(equalTo: contentView.bottomAnchor),
])
}
override func setEditing(_ editing: Bool, animated: Bool) {
super.setEditing(editing, animated: animated)
if editing {
contentViewSubviewTrailingConstraint?.constant = contentView.frame.origin.x
} else {
contentViewSubviewTrailingConstraint?.constant = 0
}
}
}
如果我们希望整个内容在编辑模式下可见并且使用表格视图单元格来调整高度,则viewController中的以下代码可以正常工作(使用动态高度单元格和所有约束(上,下,左,右)正确)
override func setEditing(_ editing: Bool, animated: Bool) {
super.setEditing(editing, animated: animated)
tableView.setEditing(editing, animated: true)
tableView.beginUpdates()
tableView.endUpdates()
}