使UISlider高度更大?

Jos*_*osa 35 cocoa-touch objective-c uislider ios

我一直在寻找一种让UISlider进度条更高的方法,即增加高度.但是,我没有取得任何成功.我不想使用自定义图像或任何东西,只是让它更高,所以UISlider看起来不那么薄.我错过了一些非常明显的东西吗

kwa*_*ahn 58

在某些情况下,接受的答案将不合需要地改变滑块的宽度,就像你使用的是minimumValueImagemaximumValueImage.如果您只想更改高度并保留其他所有内容,请使用以下代码:

override func trackRect(forBounds bounds: CGRect) -> CGRect {
   var newBounds = super.trackRect(forBounds: bounds)
   newBounds.size.height = 12
   return newBounds
}
Run Code Online (Sandbox Code Playgroud)

  • 就像一个额外的步骤,你可以添加`newBounds.origin.y - = 6`(或你的新值除以2),以确保它以新的厚度值居中于Y. (3认同)

wil*_*ils 31

这是我最近的实施,基于CularBytes的......

open class CustomSlider : UISlider {
    @IBInspectable open var trackWidth:CGFloat = 2 {
        didSet {setNeedsDisplay()}
    }

    override open func trackRect(forBounds bounds: CGRect) -> CGRect {
        let defaultBounds = super.trackRect(forBounds: bounds)
        return CGRect(
            x: defaultBounds.origin.x,
            y: defaultBounds.origin.y + defaultBounds.size.height/2 - trackWidth/2,
            width: defaultBounds.size.width,
            height: trackWidth
        )
    }
}
Run Code Online (Sandbox Code Playgroud)

通过设置其自定义类,在故事板中的UISlider上使用它 自定义类设置

IBInspectable允许您从故事板设置高度 故事板的高度

  • `@IBInspectable` 是一个 _amazing_ 补充 (2认同)

Cul*_*tes 18

对于那些希望看到一些改变轨道大小的工作代码的人.

class CustomUISlider : UISlider {

    override func trackRect(forBounds bounds: CGRect) -> CGRect {

        //keeps original origin and width, changes height, you get the idea
        let customBounds = CGRect(origin: bounds.origin, size: CGSize(width: bounds.size.width, height: 5.0))
        super.trackRect(forBounds: customBounds)
        return customBounds
    }

    //while we are here, why not change the image here as well? (bonus material)
    override func awakeFromNib() {
        self.setThumbImage(UIImage(named: "customThumb"), for: .normal)
        super.awakeFromNib()
    }
}
Run Code Online (Sandbox Code Playgroud)

唯一剩下的就是更改故事板中的类:

storyboardstuff

您可以继续使用搜索栏操作和插座到对象类型UISlider,除非您想在滑块上添加更多自定义内容.


Jos*_*osa 13

我找到了我要找的东西.以下方法只需要在子类中进行编辑.

- (CGRect)trackRectForBounds:(CGRect)bounds{
    CGRect customBounds = ...
    return customBounds;
}
Run Code Online (Sandbox Code Playgroud)

  • 这很好(并且有效),但不要忘记调用bounds = [super trackRectForBounds:bounds]; 否则它会改变滑块框架.. (4认同)
  • @Cutetare,如果你想传递自己的边界,为什么还需要调用超级`trackRectForBounds:`方法? (2认同)