Подтвердить что ты не робот

Изменение ширины и высоты UISwitch

Я пытаюсь изменить высоту и ширину по умолчанию элемента UISwitch в iOS, но безуспешно.

Можно ли изменить высоту и ширину по умолчанию элемента UISwitch?
Должен ли элемент быть создан программно?

4b9b3361

Ответ 1

Я тестировал теорию, и кажется, что вы можете использовать scale transform для увеличения размера UISwitch

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

Ответ 2

Невозможно. A UISwitch имеет заблокированную внутреннюю высоту 51 x 31.

Вы можете принудительно установить ограничения на коммутатор во время разработки в xib...

enter image description here

но придет время выполнения, оно вернется к своему внутреннему размеру.

Вы можете предоставить другое изображение с помощью свойств .onImage/.offImage, но снова из документов.

Размер этого изображения должен быть меньше или равен 77 точкам и 27 баллов. Если вы укажете большие изображения, края могут быть подрезаны.

Вам нужно будет испечь свой собственный, если вы хотите другой размер.

Ответ 3

вот хороший подкласс 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()
    }


}

Ответ 4

Swift 4

@IBOutlet weak var switchDemo: UISwitch!

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

Ответ 5

Почему бы просто не установить ограничение на раскадровку для ширины и высоты? Это может быть очень просто.

Ответ 6

Свифт 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)
    }
}