Vertical UISlider in iOS with autolayout

This is an old topic, but here is a Swift solution with autolayout constraints in storyboard and nothing else.

1/ You need to add rotation to the IBOutlet:

@IBOutlet weak var mySlider: UISlider! {
    didSet {
        mySlider.transform = CGAffineTransform(rotationAngle: -CGFloat.pi/2)
    } // didSet
} // IBOutlet

2/ Define in storyboard the constraints, keeping in mind that the Slider will be rotated around its center.

For instance if you want to locate mySlider on the left side of myView, you need three constraints.

  1. myView.Leading = mySlider.CenterX - 20
  2. mySlider.width = myView.Height (with a multiplier of 0.8 for instance)
  3. mySlider.CenterY = myView.CenterY

mySlider will of course appear horizontal in storyboard, but will have the correct sizing, and the center will be correctly positioned.


Uncheck Auto-Layout on your ViewController, there is no other option under the SDK 7.0 to make it work vertically :(


I got it to work this way:

In viewDidLoad: I added

[self.slider removeConstraints:self.slider.constraints];
[self.slider setTranslatesAutoresizingMaskIntoConstraints:YES];

so that it's called before rotating the slider with

self.slider.transform=CGAffineTransformRotate(self.slider.transform,270.0/180*M_PI);

and there is no need to remove and re-add it to superview.


I got a vertical slider working with iOS 8 and Xcode 6 with only 3 constraints in the storyboard and one line of code. Here's a cropped screencap of the interface:

enter image description here

There are 3 constraints between the vertical slider and the UIImageView next to it:

  1. vSlider.Center Y = Image View.Center Y
  2. vSlider.Width = Image View.Height
  3. vSlider.Center X = Image View.Trailing + 16

And of course the one line of code is:

self.vSlider.transform = CGAffineTransform(rotationAngle: CGFloat(Double.pi / 2))

It's easy to set up these constraints in the storyboard in Xcode 6, but I think it should be simple to write these constraints in code to support iOS 7 or 6.