web-dev-qa-db-ja.com

UISwitchの幅と高さの変更

IOSのUISwitch要素のデフォルトの高さと幅を変更しようとしていますが、失敗します。

UISwitch要素のデフォルトの高さと幅を変更できますか?
要素はプログラムで作成する必要がありますか?

23
Bharat Raichur

理論をテストしたところ、scale transformUISwitchのサイズを増やすには

UISwitch *aSwitch = [[UISwitch alloc] initWithFrame:CGRectMake(120, 120, 51, 31)];
aSwitch.transform = CGAffineTransformMakeScale(2.0, 2.0);
[self.view addSubview:aSwitch];
36
William George

ありえない。 UISwitchのロックされた固有の高さは51 x 31です。

設計時にスイッチに制約を強制することができますxib ...

enter image description here

しかし、実行時に来ると、本来のサイズに戻ります。

.onImage/.offImageプロパティを使用して別の画像を提供できますが、この場合もドキュメントから提供できます。

この画像のサイズは、幅77ポイント以下、高さ27ポイント以下でなければなりません。大きな画像を指定すると、エッジが切り取られる場合があります。

別のサイズが必要な場合は、独自のカスタムを焼く必要があります。

11
Warren Burton

Swift 4

@IBOutlet weak var switchDemo: UISwitch!

override func viewDidLoad() {
    super.viewDidLoad()
   switchDemo.transform = CGAffineTransform(scaleX: 0.75, y: 0.75)
}
9
Barath

これは、この目的のために作成した素敵なUISwitchサブクラスです。IBDesignableなので、ストーリーボード/ xibから制御できます

@IBDesignable class BigSwitch: UISwitch {

    @IBInspectable var scale : CGFloat = 1{
        didSet{
            setup()
        }
    }

    //from storyboard
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        setup()
    }
    //from code
    override init(frame: CGRect) {
        super.init(frame: frame)
        setup()
    }

    private func setup(){
        self.transform = CGAffineTransform(scaleX: scale, y: scale)
    }

    override func prepareForInterfaceBuilder() {
        setup()
        super.prepareForInterfaceBuilder()
    }


}
8

スイフト5:

import UIKit

extension UISwitch {

    func set(width: CGFloat, height: CGFloat) {

        let standardHeight: CGFloat = 31
        let standardWidth: CGFloat = 51

        let heightRatio = height / standardHeight
        let widthRatio = width / standardWidth

        transform = CGAffineTransform(scaleX: widthRatio, y: heightRatio)
    }
}
0
Ivan