Search code examples
iosuitableviewautolayout

Matching left alignment of custom & standard UITableViewCell types


I'm defining custom UITableViewCells in a storyboard. I'm also using some of the built in standard style cells. I need to set up constraints so that my custom cells match with the platform defined ones (have their titles correctly aligned at the left).

I've noticed that the left alignment of cells changes between iOS versions and the device it's running on. It seems like the left alignment is the same as the default cell separatorInset.

Here is UITableViewCells separatorInset for a few devices and iOS versions:

  • iPad on 7 – 15 points.
  • iPad on 8 – 20 points.
  • iPhone on 7 – 15 points.
  • iPhone on 8 – 16 points.

Other devices (iPhone 6+, iPad Mini) could be different – I've not exhaustively checked.

How would you go about ensuring that the custom cells and built in cells have the same left alignment of their labels?

Is there a sensible way to obtain these inset defaults and use them in auto layout constraints that are set up in a storyboard? How about in code?


Solution

  • I was having the same issue but the other answer couldn't help me as I was using static cells in UITableViewController. After a few trial-and-errors, I finally found a way to solve the separatorInset issue on iPhone 6+ without a single line of code.

    enter image description here

    I simply align the left edge of the UILabel with value of 0 [Content View (current distance = 0)] from the left margin. And also change the UILabel's X position to get 0. (For my case, in Interface Builder, margin was 7, UILabel's X = 8). The alignment works well on iPhone 4S, 5S, 6 and 6+.

    EDIT: This changed in XCode 7. Additional step: Set "Preserve Superview Margins" of the respective cell's TableViewCell and its contentView to TRUE or check it in IB -> Size Inspector. Refer to @tebs1200's answer.

    Hope this helps.