web-dev-qa-db-fra.com

Modification de la largeur et de la hauteur du commutateur UIS

J'essaie de modifier la hauteur et la largeur par défaut d'un élément UISwitch dans iOS, mais sans succès.

Pouvez-vous modifier la hauteur et la largeur par défaut d'un élément UISwitch?
L'élément doit-il être créé par programmation?

23
Bharat Raichur

J'ai testé la théorie et il semble que vous pouvez utiliser un scale transform pour augmenter la taille de UISwitch

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

Pas possible. Un UISwitch a une hauteur intrinsèque verrouillée de 51 x 31.

Vous pouvez forcer des contraintes sur le commutateur au moment du design dans le xib ...

enter image description here

mais à l'exécution, il reviendra à sa taille intrinsèque.

Vous pouvez fournir une autre image via le .onImage/.offImage propriétés mais encore des documents.

La taille de cette image doit être inférieure ou égale à 77 points de large et 27 points de haut. Si vous spécifiez des images plus grandes, les bords peuvent être tronqués.

Vous devrez faire cuire votre propre personnalisé si vous voulez une autre taille.

11
Warren Burton

Swift 4

@IBOutlet weak var switchDemo: UISwitch!

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

voici une belle sous-classe UISwitch que j'ai écrite à cet effet, elle est également IBDesignable afin que vous puissiez la contrôler depuis votre 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
Benny Davidovitz

Swift 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)
    }
}
0
Ivan