web-dev-qa-db-ja.com

UISliderの高さをカスタマイズする方法

UISlider要素をカスタマイズする必要があるプロジェクトがあります。誰かが変更する方法を知っているのか、それともUISlide棒線の高さを変更することは可能ですか?.

私はこのようなものを試しましたが動作しません:

let customBounds = CGRect(Origin: bounds.Origin, 
                          size: CGSize(width: bounds.size.width, height: 15.0))
feedbackSlider.trackRectForBounds(customBounds)

ありがとう

12
Nik

ストーリーボードで編集して、行のサイズのみを変更したいのですが、カスタム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))



       }
}
15
Learn Swift

カスタムスライダーでメソッドをオーバーライドできます

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
}
8
ronan

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
       }
}
6
nCod3d

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))
    }
}
5
David Seek

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))
  }
}
2
Coupz

UはUISliderをサブクラス化することで簡単に実行できます。次のコードを参照してください

class CustomUISlider : UISlider
{        
    override func trackRectForBounds(bounds: CGRect) -> CGRect {
    //set your bounds here
    return bounds

   }
}
0
iAnurag

autolayoutを使用している場合は、heightUISliderstoryboard制約を設定できます。実行時に変更する必要がある場合-制約のIBOutletを作成し、その.constant値を変更します。

0
Robert J. Clegg

UISliderをサブクラス化して実装することができるはずです:

- (CGRect)trackRectForBounds:(CGRect)bounds

ここで新しいCGRectを返してください。

0
pnavk