Ios stackview中的隐藏按钮在tableview中打断布局
我有一个tableviewcell,在stackview中有两个按钮。一个按钮名为topupButton,另一个按钮名为details button。如果一个标志为真,则Topupbutton隐藏。你可以找到下面的代码Ios stackview中的隐藏按钮在tableview中打断布局,ios,swift,uitableview,uistackview,Ios,Swift,Uitableview,Uistackview,我有一个tableviewcell,在stackview中有两个按钮。一个按钮名为topupButton,另一个按钮名为details button。如果一个标志为真,则Topupbutton隐藏。你可以找到下面的代码 self.topupButton.isHidden = self.selectedSim.operator_?.is_prepaid ?? false 当我隐藏“topup”按钮时,“details”按钮应在stackview中伸展。但在我的一个牢房里,它的大小不正确。当我
self.topupButton.isHidden = self.selectedSim.operator_?.is_prepaid ?? false
当我隐藏“topup”按钮时,“details”按钮应在stackview中伸展。但在我的一个牢房里,它的大小不正确。当我进行可视化调试时,我看到按钮的框架是正确的,但背景并没有穿过按钮。你可以看到下图
我尝试过布局子视图、设置需要显示、单元格所需的布局、堆栈视图和按钮。没有什么变化。您也可以在下面找到我的stackview配置
根据您的评论,很明显,
UIBeizerPath
的使用首先造成了这个问题。这是因为:
“自动布局”最适用于UIView
。但是图层不会自动调整大小
请参阅,以了解有关上述内容的更多信息
由于可能要将遮罩层添加到按钮,因此需要找到添加遮罩层的理想方法。根据我们的说法,正确的地点应该是。因此,基本上您将执行以下操作:
class TableViewCell: UITableViewCell {
. . .
override func draw(_ rect: CGRect) {
super.draw(rect)
topupButton.roundButton()
detailsButton.roundButton()
}
. . .
}
// extension for rounding button with UIBezierPath
extension UIButton {
func roundButton(){
let size = CGSize(width: bounds.width / 2, height: bounds.width / 2)
let maskPath = UIBezierPath(roundedRect: bounds,
byRoundingCorners: .allCorners,
cornerRadii: size)
let maskLayer = CAShapeLayer()
maskLayer.frame = bounds
maskLayer.path = maskPath.cgPath
layer.mask = maskLayer
}
}
我已经在stackview和contentview@nayem之间添加了约束,这些约束似乎是正确的。您在按钮上使用过任何类型的
CALayer
?我在按钮角使用过UIBezierPath。我做了layer.layoutIfNeeded,layer.layoutSublayers,layer.setNeedsLayout,但它没有解决@Nayem你可以通过注释掉UIBeizerPath
相关代码来尝试另一个按钮是否填充堆栈视图吗?是的,如果我删除代码,它工作得很好。但我需要圆角按钮:)@nayem