Objective-C
Xcode
iOS

iOS 6/7 で UILabel などの見た目がずれるよ〜とお嘆きのあなたへ

More than 5 years have passed since last update.

xib / storyboard 限定です。コードで配置してる人は他の方法を探してください。

何故ずれるか

iOS 7 Release Notes

UIKit の項に書いてあります。

If a UITextField or a UILabel that is baseline-aligned with constraints has attributes that change after the constraints have been added, the layout may be incorrect. The exception to this is -setFont: on UILabel, which should work as expected.
Workaround: Avoid making changes in UITextField or UILabel after adding baseline-alignment constraints. If you must make changes, you should remove the constraints and then reapply them afterward. Note that this is a performance hit, so don’t do it unless it is necessary.

なるほどね!?

iOS 6/7 Deltas

Xcode 5 の xib / storyboard エディタでは、View の Size Inspector に iOS 6/7 Deltas という項目があります。
Xcode 5 で iOS SDK 7.0 の場合、エディタは iOS 7 の見た目と近くなっているはずなので、まずはその位置を調整。ずれているなら、ずれていない位置に直します。
その後、iOS 6/7 Deltas に「iOS 6 で動かしたときにそれぞれ何 px 加算されてほしいか」を入力します。
例えば、掲題の UILabel のベースラインが 4px ほど下がっている問題については、ΔY = 4 と入力することで、両環境での見た目をほぼ一致させることができます。

delta