Подтвердить что ты не робот

Увеличьте высоту UISlider?

Я искал способ сделать уровень выполнения UISlider выше, т.е. увеличить высоту. Однако у меня не было никакого успеха. Я не хочу использовать пользовательский образ или что-то еще, просто сделайте его более высоким, поэтому UISlider выглядит не так тонко. Я пропустил что-то супер очевидное?

4b9b3361

Ответ 1

Я нашел то, что искал. Следующий метод просто нужно отредактировать в подклассе.

- (CGRect)trackRectForBounds:(CGRect)bounds{
    CGRect customBounds = ...
    return customBounds;
}

Ответ 2

Принятый ответ будет нежелательно менять ширину ползунка в некоторых случаях, например, если вы используете minimumValueImage и maximumValueImage. Если вы хотите изменить высоту и оставить все остальное в одиночестве, используйте этот код:

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

Ответ 3

Для тех, кто хотел бы увидеть некоторый рабочий код для изменения размера дорожки.

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()
    }
}

Осталось только изменить класс внутри раскадровки:

storyboardstuff

Вы можете продолжать использовать свое действие и выход для поиска по типу объекта UISlider, если вы не хотите добавить к своему слайдеру еще несколько пользовательских материалов.

Ответ 4

Вот моя недавняя свежая реализация, основанная на 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
        )
    }
}

Используйте это в UISlider в раскадровке, установив свой собственный класс Настройка пользовательского класса

IBInspectable позволяет установить высоту из раскадровки Высота от раскадровки

Ответ 5

Вы можете играть с этим, посмотреть, что произойдет:

slider.transform = CGAffineTransformScale(CGAffineTransformIdentity, 1.0, 2.0);