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?
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;
}
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
}
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
L'IBInspectable vous permet de définir la hauteur à partir du storyboard
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:
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.