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
}
trackRect
を上書きするのも1つの方法ですが、UISlider
のビューを追加してminimumValueImage, maximumValueImage
境界も考慮する必要があります。そうしないと、スライダーのトラックと重複します。ショートカットとして、単純にsuper
の関数を使用できます:
修正バージョン
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
}
}
Swift
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 thumbImageなしのバージョン。
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))
}
}
UはUISlider
をサブクラス化することで簡単に実行できます。次のコードを参照してください
class CustomUISlider : UISlider
{
override func trackRectForBounds(bounds: CGRect) -> CGRect {
//set your bounds here
return bounds
}
}
autolayout
を使用している場合は、height
のUISlider
にstoryboard
制約を設定できます。実行時に変更する必要がある場合-制約のIBOutlet
を作成し、その.constant
値を変更します。
UISliderをサブクラス化して実装することができるはずです:
- (CGRect)trackRectForBounds:(CGRect)bounds
ここで新しいCGRectを返してください。