真的很奇怪。
无论我如何设置约束,它都会在布局后忽略所有约束。
我尝试在cell.indicator.center = cell.center
中使用cell.indicator.autoresizingMask = [.flexibleLeftMargin, .flexibleRightMargin, .flexibleTopMargin, .flexibleBottomMargin]
和func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
但仍然没有奏效。
是否有任何特殊的方法可以将子视图集中在UITableViewCell
?
LoadingCell.xib
截图(模拟器)
更新
在尝试了@Vibha Singh的建议后,我将这些代码放在我的LoadingCell
中。
override func layoutSubviews() {
print("layoutSubviews")
print(center)
print(contentView.bounds)
indicator.center = contentView.center
}
它打印出这些线条:
layoutSubviews
(207.0, 1055.16668891907)
(0.0, 0.0, 414.0, 44.6666666666667)
但该指标仍未居中。
更新
我通过创建一个带指示符的新单元来修复它。 它们都有完全相同的约束。新的按预期居中,但旧的仍然位于左上角。
更新
我第一次使用centerX和centerY作为约束。但它没有奏效。所以我必须尝试另一种方式。这就是我在第一个屏幕截图中使用这么多限制的原因。
以下是两个完全相同的xib的截图。
他们都使用相同的代码出列。
let dequeue = tableView.dequeueReusableCell(withIdentifier: SharedCell.loading.rawValue, for: indexPath)
if let cell = dequeue as? CenterLoadingCell {
cell.indicator.startAnimating()
}
else if let cell = dequeue as? LoadingCell {
cell.indicator.startAnimating()
}
return dequeue
第一个名为LoadingCell
,不以模拟器为中心。
第二个名为CenterLoadingCell
,我在问这个问题之后创建了它。而这一个以模拟器为中心。
答案 0 :(得分:1)
答案 1 :(得分:0)
您可以添加
等指标 let activityView = UIActivityIndicatorView(activityIndicatorStyle: .gray)
activityView.center = CGPoint(x: CGFloat(cell.bounds.midX), y: CGFloat(cell.bounds.midY))
cell.contentView.addSubview(activityView)
activityView.startAnimating()
或者你可以在下面的单元格方法中设置框架
override func layoutSubviews()
{
}
答案 2 :(得分:0)
您可以使用约束轻松实现
func setConstraints(item:UIView , relatedTo:UIView , attr:NSLayoutAttribute , relatedBy:NSLayoutRelation , multiplier: CGFloat , constant : CGFloat)
{
relatedTo.addSubview(item)
item.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint(item: item, attribute: attr, relatedBy: relatedBy, toItem: relatedTo, attribute: attr, multiplier: multiplier, constant: constant).isActive = true
}
和用法:
setConstraints(item: indicator, relatedTo:cell.contentView, attr:centerX, relatedBy:.equal, multiplier: 0 , constant : 0)