我的项目必须自定义UISlider
元素。
我想知道是否有人知道如何改变,或者是否可以改变UISlide
条线的高度。
我尝试过这样的事情,但没有工作:
let customBounds = CGRect(origin: bounds.origin,
size: CGSize(width: bounds.size.width, height: 15.0))
feedbackSlider.trackRectForBounds(customBounds)
由于
答案 0 :(得分:14)
我希望你想在故事板中编辑它,只有线条大小,在你的自定义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 :(得分:8)
您可以覆盖自定义滑块
中的方法对于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
}
答案 2 :(得分:5)
覆盖trackRect
是一种方法,但是如果您使用其他UISlider
的观看内容,例如minimumValueImage, maximumValueImage
,您还需要将其限制为super
帐户,否则它们将与滑块的轨道重叠。作为一种快捷方式,您只需使用 @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
}
}
' func:
修正版。
Swift 3 +
.navbar-toggle:hover {
background-color: green !important;
}
答案 3 :(得分: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))
}
}
答案 4 :(得分:2)
没有thumbImage的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))
}
}
答案 5 :(得分:0)
您应该能够继承UISlider,然后实现:
- (CGRect)trackRectForBounds:(CGRect)bounds
只需返回新的CGRect。
答案 6 :(得分:0)
U可以通过子类化gesv
轻松完成。见以下代码
UISlider
答案 7 :(得分:0)
我认为上述答案有一个缺陷:必须校正轨道rect的原点以解决轨道高度的变化,否则它将偏心显示。这是我的方法:
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))
}
}
答案 8 :(得分:-1)
如果您正在使用autolayout
,则可以在height
的{{1}}上设置UISlider
约束。如果需要在运行时更改它 - 为约束创建storyboard
并修改其IBOutlet
值。