leading or trailing horizontal alignment before iOS 11

Viewed 9664

Warning: leading or trailing horizontal alignment before iOS 11

I am getting above warning during compilation on Xcode 9.1 on one of the scenes in a storyboard file. There are other storyboards (with deployment target iOS 10.0) and yet the warning is shown to this specific scene on a specific Storyboard file.

The warning gets suppressed if I change deployment target to iOS 11.0 on the scene where warning is shown but I don't want to do that.

Has anyone come across this case?

4 Answers

Step 1:

View your offending storyboard as source code: enter image description here

Step 2:

Replace all instances of:

contentHorizontalAlignment="leading"

with:

contentHorizontalAlignment="left"

Step 3:

Replace all instances of:

contentHorizontalAlignment="trailing"

with:

contentHorizontalAlignment="right"

Step 4:

Compile and watch warning disappear.

I find this approach easier when you have a ton of elements that need to be modified. "leading" and "trailing" as 'contentHorizontalAlignment' value types were introduced with iOS 11. iOS 10 doesn't know about "leading" and "trailing" which is the reason for the warning.

In the build log, right before the word "warning", you will see an Interface Builder identifier in the form "xxx-yy-zzz". Copy and paste that into the Xcode search bar, and it will find the "offending" control for you. Click on the search result and it will take you right into the storyboard with the corresponding control selected. The rest of the problem can be resolved using the other answers.

I had this problem with a whole bunch of buttons that I needed left aligned with a little offset. I removed the storyboard alignment and did it like this in viewDidLoad with an array of the needy buttons.

func indentButtons(buttons: [UIButton?]){
    for i in 0..<buttons.count{
        buttons[i]!.contentHorizontalAlignment = .left
        buttons[i]!.titleEdgeInsets = UIEdgeInsetsMake(0, 5, 0, 0)
    }
}
Related