如何自定义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
,则可以在storyboard
的UISlider
上设置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 } }