iOS-subivew可以';不能在UITableViewCell中居中
真奇怪。 无论我如何设置约束,它只是在布局之后忽略所有约束。 我已经尝试在iOS-subivew可以';不能在UITableViewCell中居中,ios,swift,xcode,uitableview,autolayout,Ios,Swift,Xcode,Uitableview,Autolayout,真奇怪。 无论我如何设置约束,它只是在布局之后忽略所有约束。 我已经尝试在func表视图(u表视图:UITableView,cellForRowAt indexPath:indexxpath)->UITableViewCell)中使用cell.indicator.center=cell.center和cell.indicator.autoresizingMask=[.flexibleleleleftmargin、.flexibleRightMargin、.flexibleTopMargin、.f
func表视图(u表视图:UITableView,cellForRowAt indexPath:indexxpath)->UITableViewCell)中使用cell.indicator.center=cell.center
和cell.indicator.autoresizingMask=[.flexibleleleleftmargin、.flexibleRightMargin、.flexibleTopMargin、.flexibleBottomMargin]
但仍然不起作用。
在UITableViewCell
中,是否有任何特殊方法可以将子视图居中
LoadingCell.xib
屏幕截图(模拟器)
更新:
在尝试了@Vibha Singh的建议后,我将这些代码放在我的加载单元中
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
,是我在提出这个问题后创建的。这个以模拟器为中心
您可以添加如下指示器
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()
{
}
由于添加了不必要的约束,布局设置非常混乱。检查此实现
使用自定义单元格:
您可以通过约束轻松实现
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)
是否可以添加有关正在使用的约束的更多信息?设置cellForRow
中的中心将不起作用,因为之后会进行更多的布局尝试使用cell.indicator.center=cell.contentView?.center
而不是使用cell.indicator.center=cell.center
@CatalinaT。您可以在第一张图像中看到所有约束。仅在指示器centreX和centreY上添加两个约束,并删除所有其他约束无需执行任何其他操作仅添加两个约束,删除所有约束,并将代码添加到中心itTried。我第一次确实使用了这些约束。但它不起作用。因此,我尝试了另一种方法来查看它是否有效。我也尝试了自定义单元格实现。检查附加的另一个屏幕截图。刚刚创建了另一个带有指示器的单元格,并且仅使用centerX和centerY约束。这一个按预期居中。但是原始的加载单元仍然没有居中。它们都有完全相同的约束。这是否意味着原始的LoadingCell
有来自autolayout的内部问题?不能不看两个单元格就说它对您有效。我上传了关于这两个XIB的截图。希望能有所帮助。