web-dev-qa-db-fra.com

Comment personnaliser la hauteur d'UISlider

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

9
Nik

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))



       }
}
14
Learn Swift

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
}
8
ronan

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
       }
}
5
nCod3d

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))
    }
}
4
David Seek

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))
  }
}
2
Coupz

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

   }
}
0
iAnurag

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

0
Robert J. Clegg

Vous devriez pouvoir sous-classer UISlider puis implémenter:

- (CGRect)trackRectForBounds:(CGRect)bounds

Il suffit de retourner le nouveau CGRect ici.

0
pnavk