How to customise UISlider height
我有一个必须自定义
我想知道是否有人知道如何更改,或者是否可以更改
我尝试过类似的操作,但不起作用:
1 2 3 | let customBounds = CGRect(origin: bounds.origin, size: CGSize(width: bounds.size.width, height: 15.0)) feedbackSlider.trackRectForBounds(customBounds) |
谢谢
我希望您要在情节提要中对其进行编辑,并且仅在行大小中将其用于自定义UISlider
1 2 3 4 5 6 7 8 9 10 11 12 | 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)) } } |
覆盖
固定版本。
雨燕3
1 2 3 4 5 6 7 8 9 10 11 12 | @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 } } |
您可以在自定义滑块中覆盖方法
对于Objective-C
1 2 3 4 | - (CGRect)trackRectForBounds:(CGRect)bounds { CGRect rect = CGRectMake(0, 0, 100, 30);//change it to any size you want return rect; } |
对于Swift
1 2 3 4 | override func trackRectForBounds(bounds: CGRect) -> CGRect { var rect:CGRect = CGRectMake(0, 0, 100, 30) return rect } |
不带thumbImage的Swift 4版本。
1 2 3 4 5 6 7 | 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)) } } |
迅捷3
1 2 3 4 5 6 7 | 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)) } } |
U可以通过子类化
1 2 3 4 5 6 7 8 | class CustomUISlider : UISlider { override func trackRectForBounds(bounds: CGRect) -> CGRect { //set your bounds here return bounds } } |
我认为上面的答案有一个缺陷:必须校正Railsrect的原点以解决Rails高度的变化,否则它将偏心显示。这是我的操作方式:
1 2 3 4 5 6 7 8 9 | class CustomSlider: UISlider { @IBInspectable var sliderTrackHeight : CGFloat = 2 override func trackRect(forBounds bounds: CGRect) -> CGRect { let originalRect = super.trackRect(forBounds: bounds) return CGRect(origin: CGPoint(x: originalRect.origin.x, y: originalRect.origin.y + (sliderTrackHeight / 2)), size: CGSize(width: bounds.width, height: sliderTrackHeight)) } } |
您应该能够继承UISlider的子类,然后实现:
1 | - (CGRect)trackRectForBounds:(CGRect)bounds |
只需在此处返回新的CGRect。
如果使用的是