如何自定义UISlider高度

我有项目中必须定制UISlider元素。 我想知道如果有人知道如何改变,或者是否有可能改变UISlide酒吧线的高度。

我试过这样的东西,但不工作:

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

谢谢

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

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

对于Objective-C

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

对于Swift

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

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

重写trackRect是一种方法,但是如果你使用额外的UISlider的视minimumValueImage, maximumValueImage你还需要考虑它们的边界,否则它们将与滑块的轨道重叠。 作为一个快捷方式,你可以简单地使用super的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 } 

}

如果您使用自动autolayout ,则可以在storyboardUISlider上设置height限制。 如果您需要在运行时更改它,请为该约束创build一个IBOutlet并修改它的.constant值。

你应该能够inheritanceUISlider,然后执行:

 - (CGRect)trackRectForBounds:(CGRect)bounds 

只需在这里返回新的CGRect。

U可以通过UISlider来轻松完成。 看下面的代码

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