Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios stackview中的隐藏按钮在tableview中打断布局_Ios_Swift_Uitableview_Uistackview - Fatal编程技术网

Ios stackview中的隐藏按钮在tableview中打断布局

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中伸展。但在我的一个牢房里,它的大小不正确。当我

我有一个tableviewcell,在stackview中有两个按钮。一个按钮名为topupButton,另一个按钮名为details button。如果一个标志为真,则Topupbutton隐藏。你可以找到下面的代码

  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