IOSのUISwitch要素のデフォルトの高さと幅を変更しようとしていますが、失敗します。
UISwitch要素のデフォルトの高さと幅を変更できますか?
要素はプログラムで作成する必要がありますか?
理論をテストしたところ、scale transform
UISwitch
のサイズを増やすには
UISwitch *aSwitch = [[UISwitch alloc] initWithFrame:CGRectMake(120, 120, 51, 31)];
aSwitch.transform = CGAffineTransformMakeScale(2.0, 2.0);
[self.view addSubview:aSwitch];
ありえない。 UISwitch
のロックされた固有の高さは51 x 31
です。
設計時にスイッチに制約を強制することができますxib ...
しかし、実行時に来ると、本来のサイズに戻ります。
.onImage
/.offImage
プロパティを使用して別の画像を提供できますが、この場合もドキュメントから提供できます。
この画像のサイズは、幅77ポイント以下、高さ27ポイント以下でなければなりません。大きな画像を指定すると、エッジが切り取られる場合があります。
別のサイズが必要な場合は、独自のカスタムを焼く必要があります。
Swift 4
@IBOutlet weak var switchDemo: UISwitch!
override func viewDidLoad() {
super.viewDidLoad()
switchDemo.transform = CGAffineTransform(scaleX: 0.75, y: 0.75)
}
これは、この目的のために作成した素敵な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()
}
}
スイフト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)
}
}