更改UISwitch的宽度和高度

问题描述 投票:21回答:5

我试图在iOS中更改UISwitch元素的默认高度和宽度,但未成功。

你能改变UISwitch元素的默认高度和宽度吗? 元素是否应该以编程方式创建?

ios uiswitch
5个回答
36
投票

我测试了这个理论,你似乎可以使用scale transform来增加UISwitch的大小

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

11
投票

不可能。 UISwitch有一个锁定的51 x 31内在高度。

您可以在设计时在xib中强制对开关施加约束...

但是到了运行时它将恢复到其固有的大小。

您可以通过.onImage / .offImage属性提供另一个图像,但同样可以从文档中提供。

此图像的大小必须小于或等于77点宽,27点高。如果指定较大的图像,则可能会剪裁边缘。

如果你想要另一种尺寸,你将不得不烘烤自己的自定义。


8
投票

这是我为此目的写的一个很好的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()
    }


}

8
投票

斯威夫特4

@IBOutlet weak var switchDemo: UISwitch!

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

0
投票

斯威夫特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)
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.