更改UISwitch的宽度和高度

时间:2014-08-03 12:25:23

标签: ios uiswitch

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

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

7 个答案:

答案 0 :(得分: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];

答案 1 :(得分:10)

不可能。 UISwitch的内在高度为51 x 31

您可以在设计时在xib ...

中强制对开关施加约束

enter image description here

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

您可以通过.onImage / .offImage属性提供另一张图片,但也可以从文档中提供。

  

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

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

答案 2 :(得分: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()
    }


}

答案 3 :(得分:7)

快捷键4

@IBOutlet weak var switchDemo: UISwitch!

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

答案 4 :(得分:1)

即使可以将UISwitch缩小,这也会对用户体验产生负面影响。苹果公司Human Interface Guidelines建议触摸目标的最小尺寸为44点。

为交互式元素提供足够的触摸目标。尝试将所有控件的最小可触摸区域保持为44pt x 44pt

通过将其缩放到小于标准尺寸,用户将变得更加难以点击,并带来了可访问性问题。在缩小UI元素之前,请考虑视力或运动控制不佳的用户。

最后,这是摘录自article about touch target sizes的摘录,阐明了控件太小会发生什么情况。

访问者 —“我注意到,您在此屏幕上提交电子邮件地址时遇到了麻烦,您能告诉我您的感觉吗?”

用户-“哦,我不是很擅长技术。”

采访者-“您认为当时导致您挣扎的是什么?”

用户-“这些按钮很难被点击,我一直在塞满它。”

答案 5 :(得分: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)
    }
}

答案 6 :(得分:0)

import UIKit

extension UISwitch {

    static let standardHeight: CGFloat = 31
    static let standardWidth: CGFloat = 51
    
    @IBInspectable var width: CGFloat {
        set {
            set(width: newValue, height: height)
        }
        get {
            frame.width
        }
    }
    
    @IBInspectable var height: CGFloat {
        set {
            set(width: width, height: newValue)
        }
        get {
            frame.height
        }
    }
    
    func set(width: CGFloat, height: CGFloat) {

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

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