我试图在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点高。如果指定较大的图像,则可能会剪裁边缘。
如果你想要另一种尺寸,你将不得不烘烤自己的自定义。
这是我为此目的写的一个很好的UISwitch子类,它也是IBDesignable所以你可以从你的Storyboard / 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()
}
}
斯威夫特4
@IBOutlet weak var switchDemo: UISwitch!
override func viewDidLoad() {
super.viewDidLoad()
switchDemo.transform = CGAffineTransform(scaleX: 0.75, y: 0.75)
}
斯威夫特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)
}
}