web-dev-qa-db-fra.com

Agrandir la hauteur UISlider?

J'ai cherché un moyen de rendre la barre de progression UISlider plus haute, c'est-à-dire d'augmenter la hauteur. Cependant, je n'ai pas eu de succès. Je ne veux pas utiliser une image personnalisée ou quoi que ce soit, juste l'agrandir, pour que le UISlider ne soit pas si fin. Suis-je en train de manquer quelque chose de super évident?

33
Josue Espinosa

J'ai trouvé ce que je cherchais. La méthode suivante doit juste être modifiée dans une sous-classe.

- (CGRect)trackRectForBounds:(CGRect)bounds{
    CGRect customBounds = ...
    return customBounds;
}
13
Josue Espinosa

La réponse acceptée modifiera de manière indésirable la largeur du curseur dans certains cas, comme si vous utilisez un minimumValueImage et maximumValueImage. Si vous voulez seulement changer la hauteur et laisser tout le reste tranquille, utilisez ce code:

override func trackRect(forBounds bounds: CGRect) -> CGRect {
   var newBounds = super.trackRect(forBounds: bounds)
   newBounds.size.height = 12
   return newBounds
}
54
kwahn

Voici ma récente implémentation swifty, en s'appuyant sur CularBytes ...

open class CustomSlider : UISlider {
    @IBInspectable open var trackWidth:CGFloat = 2 {
        didSet {setNeedsDisplay()}
    }

    override open func trackRect(forBounds bounds: CGRect) -> CGRect {
        let defaultBounds = super.trackRect(forBounds: bounds)
        return CGRect(
            x: defaultBounds.Origin.x,
            y: defaultBounds.Origin.y + defaultBounds.size.height/2 - trackWidth/2,
            width: defaultBounds.size.width,
            height: trackWidth
        )
    }
}

Utilisez-le sur un UISlider dans un storyboard en définissant sa classe personnalisée Custom class setting

L'IBInspectable vous permet de définir la hauteur à partir du storyboard Height from storyboard

31
wils

Pour ceux qui voudraient voir du code de travail pour changer la taille de la piste.

class CustomUISlider : UISlider {

    override func trackRect(forBounds bounds: CGRect) -> CGRect {

        //keeps original Origin and width, changes height, you get the idea
        let customBounds = CGRect(Origin: bounds.Origin, size: CGSize(width: bounds.size.width, height: 5.0))
        super.trackRect(forBounds: customBounds)
        return customBounds
    }

    //while we are here, why not change the image here as well? (bonus material)
    override func awakeFromNib() {
        self.setThumbImage(UIImage(named: "customThumb"), for: .normal)
        super.awakeFromNib()
    }
}

Il ne reste plus qu'à changer la classe à l'intérieur du storyboard:

storyboardstuff

Vous pouvez continuer à utiliser votre action et votre sortie de barre de recherche vers le type d'objet UISlider, à moins que vous ne souhaitiez ajouter d'autres éléments personnalisés à votre curseur.

18
CularBytes