2015-07-23 18 views
6

Ich habe Projekt, in dem UISlider Element anpassen müssen. Ich frage mich, ob jemand weiß, wie man ändert, oder ist es möglich, Höhe von UISlide Bar-Linie zu ändern.Wie anpassen UISlider Höhe

Ich habe versucht, so etwas wie dieses, aber nicht funktionieren:

let customBounds = CGRect(origin: bounds.origin, 
          size: CGSize(width: bounds.size.width, height: 15.0)) 
feedbackSlider.trackRectForBounds(customBounds) 

Dank

Antwort

0

Wenn Sie autolayout verwenden Sie eine height Einschränkung für die UISlider im storyboard einstellen. Wenn Sie es zur Laufzeit ändern müssen, erstellen Sie eine IBOutlet für die Abhängigkeit und ändern Sie ihren Wert .constant.

+0

Ich denke, es nur ist die Innenhöhe zu ändern, wenn sich der Schieber, nicht die Spurhöhe –

0

sollten Sie in der Lage sein, die UISlider Unterklasse und dann implementieren:

- (CGRect)trackRectForBounds:(CGRect)bounds 

Sie hier das neue CGRect zurückzukehren.

0

U kann leicht durch Unterklassen UISlider getan werden. siehe folgenden Code

class CustomUISlider : UISlider 
{   
    override func trackRectForBounds(bounds: CGRect) -> CGRect { 
    //set your bounds here 
    return bounds 

    } 
} 
8

Sie eine Methode in Sie benutzerdefinierte

Für Objective-C

- (CGRect)trackRectForBounds:(CGRect)bounds { 
    CGRect rect = CGRectMake(0, 0, 100, 30);//change it to any size you want 
    return rect; 
} 

Für Swift

override func trackRectForBounds(bounds: CGRect) -> CGRect { 
    var rect:CGRect = CGRectMake(0, 0, 100, 30) 
    return rect 
} 
+3

, wenn ich diesen Code verwenden, um die Höhe des Schiebers erfolgreich geändert. Aber wenn der Schieberegler zum Ende kommt, blinkt die abgerundete Ecke quadratisch. Es scheint, dass dieser Code nicht für die abgerundete Ecke am Ende eines Schiebereglers verantwortlich ist. irgendeine Idee, wie man das macht? – haplo1384

12

ich hoffe slider außer Kraft setzen können, dass Sie bearbeiten möchten in Storyboard und nur die Zeilengröße, verwenden Sie es in Ihrem benutzerdefinierten UISlider

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



     } 
} 
+1

seine Arbeit nett zu mir! –

+1

danke es ist der höfliche Weg: D –

4

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

Zwingende trackRect ist ein Weg zu gehen, aber wenn Sie zusätzliche UISlider ‚s Ansichten wie minimumValueImage, maximumValueImage verwenden würden Sie auch ihre Rechnung gebunden nehmen müssen, andernfalls Sie überschneiden sich mit der Spur des Sliders. Als Abkürzung können Sie einfach super 's Func verwenden:

Feste Version.

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 
    } 

}