読者です 読者をやめる 読者になる 読者になる

なるようになるかも

力は多くの場合、その人の思いを超えない。

iOS7のUITableViewのHeader Section RTL対応化の謎

iOSのRTL(Right-To-Left、アラビア語やヘブライ語など左から右に記述する言語)への対応は、iOS6のAuto Layoutで初めて実装されました。

なので、それ以前から存在しているUITableViewはRTLのことを一切考慮していない…と思っていたんだけど、iOS7以降だとUITableViewHeaderFooterViewがRTLで表示されることがあるみたいだ。

ただその条件と実装がよく分からない。

  • 言語設定をRTL言語にすると変化する。
  • それ以外でも変化することがある。
  • セクションヘッダに表示する文字がRTL言語かどうかは関係ない。
  • アプリがRTL言語のローカライズに対応しているかどうかは関係ない。
  • タイムゾーンの設定では変化しない。
  • シミュレータで言語設定をRTL言語にした後、LTR言語に戻してもセクションヘッダが右寄せのままになることがある…。

Auto Layoutで表示しているだけじゃないかと考え、UITableViewHeaderFooterViewtextLabelに対して、constraintsAffectingLayoutForOrientation:を実行してみたものの、何の制約も取得できなかった。Auto Layoutのleading制約で表示しているわけではない、…と思われる(Auto Layoutはあんまり自信がない)。

また、同textLabeltextAlignmentプロパティは常にNSTextAlignmentLeftを返すので、textAlignmentの指定を変えているわけではないと思われる。しかし明示的にNSTextAlignmentLeftを指定することで、LTR表記に戻すことができるのがまた良く分からない…。

となると、Text Kitのレイヤで何らかのRTL言語対応が行われて、その影響でiOS7でのみUILabelの挙動が変わるんじゃないかという可能性が残る。しかし普通のUITableViewCellはLTR表記のままなのに、セクションヘッダだけ右寄せになる挙動は理解に苦しむ。

f:id:quesera2:20131022225738p:plain

うーん…。