如何自定义UISlider高度

时间:2015-07-23 14:23:03

标签: ios objective-c iphone swift uislider

我的项目必须自定义UISlider元素。 我想知道是否有人知道如何改变,或者是否可以改变UISlide条线的高度。

我尝试过这样的事情,但没有工作:

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

由于

9 个答案:

答案 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值。