如何自定义UISlider高度

Nik*_*Nik 12 iphone objective-c uislider ios swift

我有项目必须自定义UISlider元素.我想知道是否有人知道如何改变,或者是否有可能改变UISlide条线的高度.

我尝试过类似的东西但不起作用:

let customBounds = CGRect(origin: bounds.origin, 
                          size: CGSize(width: bounds.size.width, height: 15.0))
feedbackSlider.trackRectForBounds(customBounds)
Run Code Online (Sandbox Code Playgroud)

谢谢

Lea*_*ift 16

我希望你想在故事板中编辑它,只有行大小,在你的自定义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))



       }
}
Run Code Online (Sandbox Code Playgroud)


ron*_*nan 8

您可以覆盖自定义滑块中的方法

对于Objective-C

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

对于斯威夫特

override func trackRectForBounds(bounds: CGRect) -> CGRect {
    var rect:CGRect = CGRectMake(0, 0, 100, 30)
    return rect
}
Run Code Online (Sandbox Code Playgroud)

  • 当我使用此代码时,滑块的高度成功更改.但当滑块到达末尾时,圆角"闪烁"正方形.似乎这段代码不能解释滑块末端的圆角.任何想法如何做到这一点? (7认同)

nCo*_*d3d 6

覆盖trackRect是一种方法,但是如果你正在使用额外UISlider的视图,minimumValueImage, maximumValueImage你也需要考虑它们的绑定,否则它们将与滑块的轨道重叠.作为一种捷径,你可以简单地使用super's func:

固定版本.

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
       }
}
Run Code Online (Sandbox Code Playgroud)


Cou*_*upz 6

没有拇指图像的Swift 4版本。

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))
  }
}
Run Code Online (Sandbox Code Playgroud)


Dav*_*eek 5

迅捷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))
    }
}
Run Code Online (Sandbox Code Playgroud)


Rob*_*egg -1

如果您正在使用,autolayout则可以heightUISlider中设置约束storyboard。如果您需要在运行时更改它 -IBOutlet为约束创建一个并修改其.constant值。