J'ai un projet dans lequel il faut personnaliser l'élément UISlider
. Je me demande si quelqu'un sait comment changer ou s'il est possible de changer la hauteur de la barre UISlide
.
J'ai essayé quelque chose comme ça mais ça ne marche pas:
let customBounds = CGRect(Origin: bounds.Origin,
size: CGSize(width: bounds.size.width, height: 15.0))
feedbackSlider.trackRectForBounds(customBounds)
Merci
j'espère que vous voulez l'éditer dans le storyboard, et seulement la taille de la ligne, utilisez-le dans votre UISlider personnalisé
class CustomSlide: UISlider {
@IBInspectable var trackHeight: CGFloat = 2
override func trackRectForBounds(bounds: CGRect) -> CGRect {
//set your bounds here
return CGRect(Origin: bounds.Origin, size: CGSizeMake(bounds.width, trackHeight))
}
}
Vous pouvez remplacer une méthode dans votre curseur personnalisé
Pour Objective-C
- (CGRect)trackRectForBounds:(CGRect)bounds {
CGRect rect = CGRectMake(0, 0, 100, 30);//change it to any size you want
return rect;
}
Pour Swift
override func trackRectForBounds(bounds: CGRect) -> CGRect {
var rect:CGRect = CGRectMake(0, 0, 100, 30)
return rect
}
Remplacer trackRect
est une solution, mais si vous utilisez des vues supplémentaires de UISlider
telles que minimumValueImage, maximumValueImage
, vous devez également prendre en compte leur limite, sinon elles chevaucheront la piste du curseur. En tant que raccourci, vous pouvez simplement utiliser la fonction super
:
Version fixe.
Swift 3+
@IBDesignable
class CustomSlider: UISlider {
/// custom slider track height
@IBInspectable var trackHeight: CGFloat = 3
override func trackRect(forBounds bounds: CGRect) -> CGRect {
// Use properly calculated rect
var newRect = super.trackRect(forBounds: bounds)
newRect.size.height = trackHeight
return newRect
}
}
Swift 3
class MySlide: UISlider {
@IBInspectable var height: CGFloat = 2
override func trackRect(forBounds bounds: CGRect) -> CGRect {
return CGRect(Origin: bounds.Origin, size: CGSize(width: bounds.width, height: height))
}
}
Swift 4 version sans pouceImage.
class CustomSlider: UISlider {
@IBInspectable var trackHeight: CGFloat = 2
override func trackRect(forBounds bounds: CGRect) -> CGRect {
return CGRect(Origin: bounds.Origin, size: CGSize(width: bounds.width, height: trackHeight))
}
}
Vous pouvez facilement le faire en sous-classant UISlider
. voir le code suivant
class CustomUISlider : UISlider
{
override func trackRectForBounds(bounds: CGRect) -> CGRect {
//set your bounds here
return bounds
}
}
Si vous utilisez autolayout
, vous pouvez définir une contrainte height
sur la UISlider
dans la storyboard
. si vous devez le modifier au moment de l'exécution, créez une variable IBOutlet
pour la contrainte et modifiez sa valeur .constant
.
Vous devriez pouvoir sous-classer UISlider puis implémenter:
- (CGRect)trackRectForBounds:(CGRect)bounds
Il suffit de retourner le nouveau CGRect ici.