Swift UITableViewCell separatorStyle 在 iPhone MIni 上打破了自动布局
Swift UITableViewCell separatorStyle breaking autolayout on iPhone MIni
我有一个 UITableView,它有一个包含 UIImageView 的 UITableViewCell。
设置约束,使 UIImageView 在顶部和侧面有 20 个填充点,大小比为 1:1,因此无论设备宽度如何,UIImageView 始终为正方形。
我将 cornerRadius 应用于 UIImageView,因此图像是圆形的。
但是....自动布局似乎在第一次加载时不起作用。但在第一次加载后,它运行完美。
我已经尝试了 setNeedsLayout 或 layoutIfNeeded 的所有已知组合 - 在 UITableViewCell 内部和 UITableView 代码中。第一次加载时没有任何效果。
请帮忙!
代码如下所示:
class CircularProfileCell: UITableViewCell {
@IBOutlet weak var circularView: UIView!
func setup() {
circularView.layer.cornerRadius = circularView.bounds.height / 2
}
}
class CircularProfileVC: UITableViewController {
override func viewDidLoad() {
super.viewDidLoad()
self.tableView.separatorStyle = .none
self.tableView.register(UINib(nibName: "CircularProfileCell", bundle: nil), forCellReuseIdentifier: "CircularProfileCell")
}
override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "CircularProfileCell", for: indexPath) as! CircularProfileCell
cell.setup()
return cell
}
}
设置如下所示:
因为圆角半径是 layer
属性 它并不总是能很好地与自动布局配合使用。另外,我猜你是用视图的框架属性设置的(即imageView.layer.cornerRadius = imageView.bounds.height/2
)。
因此,您应该尝试在单元格的 layoutSubviews()
函数上设置角半径。这将确保呈现正确的尺寸
override func layoutSubviews() {
super.layoutSubviews()
imageView.layer.cornerRadius = imageView.bounds.height/2
...
}
只有当 tableView.separatorStyle = .none
为了解决这个问题,我只是让分隔符保持打开状态,但将分隔符颜色设置为透明
self.tableView.separatorStyle = .singleLine
self.tableView.separatorColor = UIColor.clear
感谢@CloudBalacing 的帮助。有关此问题的更多信息
我有一个 UITableView,它有一个包含 UIImageView 的 UITableViewCell。
设置约束,使 UIImageView 在顶部和侧面有 20 个填充点,大小比为 1:1,因此无论设备宽度如何,UIImageView 始终为正方形。
我将 cornerRadius 应用于 UIImageView,因此图像是圆形的。
但是....自动布局似乎在第一次加载时不起作用。但在第一次加载后,它运行完美。
我已经尝试了 setNeedsLayout 或 layoutIfNeeded 的所有已知组合 - 在 UITableViewCell 内部和 UITableView 代码中。第一次加载时没有任何效果。
请帮忙!
代码如下所示:
class CircularProfileCell: UITableViewCell {
@IBOutlet weak var circularView: UIView!
func setup() {
circularView.layer.cornerRadius = circularView.bounds.height / 2
}
}
class CircularProfileVC: UITableViewController {
override func viewDidLoad() {
super.viewDidLoad()
self.tableView.separatorStyle = .none
self.tableView.register(UINib(nibName: "CircularProfileCell", bundle: nil), forCellReuseIdentifier: "CircularProfileCell")
}
override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "CircularProfileCell", for: indexPath) as! CircularProfileCell
cell.setup()
return cell
}
}
设置如下所示:
因为圆角半径是 layer
属性 它并不总是能很好地与自动布局配合使用。另外,我猜你是用视图的框架属性设置的(即imageView.layer.cornerRadius = imageView.bounds.height/2
)。
因此,您应该尝试在单元格的 layoutSubviews()
函数上设置角半径。这将确保呈现正确的尺寸
override func layoutSubviews() {
super.layoutSubviews()
imageView.layer.cornerRadius = imageView.bounds.height/2
...
}
只有当 tableView.separatorStyle = .none
为了解决这个问题,我只是让分隔符保持打开状态,但将分隔符颜色设置为透明
self.tableView.separatorStyle = .singleLine
self.tableView.separatorColor = UIColor.clear
感谢@CloudBalacing 的帮助。有关此问题的更多信息