[英]How to customise UISlider height
我有一個項目,必須在其中自定義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))
}
}
覆蓋trackRect
是一種方法,但是如果您使用其他UISlider
的視圖,如minimumValueImage, maximumValueImage
您還需要考慮它們的邊界,否則它們將與滑塊的軌道重疊。 作為一種快捷方式,您可以簡單地使用super
的 func:
固定版。
斯威夫特 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
}
}
您可以覆蓋自定義滑塊中的方法
對於 Objective-C
- (CGRect)trackRectForBounds:(CGRect)bounds {
CGRect rect = CGRectMake(0, 0, 100, 30);//change it to any size you want
return rect;
}
對於斯威夫特
override func trackRectForBounds(bounds: CGRect) -> CGRect {
var rect:CGRect = CGRectMake(0, 0, 100, 30)
return rect
}
斯威夫特 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))
}
}
沒有拇指圖像的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))
}
}
你可以通過UISlider
輕松完成它。 看下面的代碼
class CustomUISlider : UISlider
{
override func trackRectForBounds(bounds: CGRect) -> CGRect {
//set your bounds here
return bounds
}
}
您應該能夠對 UISlider 進行子類化,然后實現:
- (CGRect)trackRectForBounds:(CGRect)bounds
只需在此處返回新的 CGRect 即可。
我認為上面的答案有一個缺陷:軌道 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))
}
}
如果您使用自動autolayout
您可以在storyboard
的UISlider
上設置height
約束。 如果您需要在運行時更改它 - 為約束創建一個IBOutlet
並修改其.constant
值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.