iOS frame change one property (eg width)

前端 未结 9 1055
日久生厌
日久生厌 2020-12-14 00:20

This question was originally asked for the objective-c programming language. At the time of writing, swift didn\'t even exist yet.

Question

Is it po

9条回答
  •  旧时难觅i
    2020-12-14 00:45

    frequently call setFrame method is not so good, like: setFrameX(x) setFrameY(y) setFrameWidth(width) ...

    instead, in swift we can make use of default parameters to set multiple parameters only in one call:

    func setFrame(x x: CGFloat = CGFloat.NaN, y: CGFloat = CGFloat.NaN, width: CGFloat = CGFloat.NaN, height: CGFloat = CGFloat.NaN) {
        let newX = x.isNaN ? self.frame.origin.x : x
        let newY = y.isNaN ? self.frame.origin.y : y
        let newWidth = width.isNaN ? self.bounds.size.width : width
        let newHeight = height.isNaN ? self.bounds.size.height : height
    
        self.frame = CGRect(x: newX, y: newY, width: newWidth, height: newHeight)
    }
    

    then update parameters of frame only need:

    setFrame(x: x, width: min(maxX - x, titleLabel.bounds.size.width))
    setFrame(width: titleDescriptionLabel.bounds.size.width + 5, height: titleDescriptionLabel.bounds.size.height + 6)
    

提交回复
热议问题