自動レイアウトなしでXIBを使用するアプリケーションに問題があります。これが重要な情報かどうかはわかりません。
Wordラップを使用した2行のUILabelがあります。 iOS 10では、ワードラップは正常に機能し、最初の行には1つのワードとアンパサンドなどの特殊文字が含まれていました。例:
次に、iOS 11では、Wordラップが何らかの形で機能しなくなり、アンプレスを2行目に追加します。
これは、通常2行目に収まる長い単語が正しく表示されないため、問題になります。何が変わったのでしょうか?私はsafeAreaについて知っていますが、それは理由のように見えません。そのアンパサンドをその上に十分なスペースがある最上部に移動する方法はありますか?
これはおそらくAppleによる未亡人の行を防ぐための意図的な変更である可能性があります。テキストの2番目の行に常に少なくとも2つの単語が含まれるように行を分割します。
ただし、この動作を無効にするドキュメントまたは方法がないことは驚くべきことです。
また、「未亡人」および「孤立した」テキストに関する 良い記事 もあります。
引数を使用してアプリを起動する-NSAllowsDefaultLineBreakStrategy NO
(文書化されていないデフォルト設定)は、古い動作に強制的に戻すようです。または、起動時にNSAllowsDefaultLineBreakStrategy
でNO
をNSUserDefaults
に設定できます(AppleはYES
または文字列描画コードが初期化されたときに、その値のUILabel
のデフォルトを登録します。 NSArgumentDomain
に入力するか、単にデフォルトを永続的に設定します)。
AppleはそのプライベートAPIを検討し、それを使用するアプリを拒否する場合があります。よく分かりません。私は配送アプリでこれを試していません。ただし、クイックテストでは機能します。NSUserDefaults
の設定を確認し、変更すると動作が変更されることがわかりました。
オプションとして、代わりにUITextViewを使用することもできますが、この動作はないようです。 NSTextContainer.lineFragmentPaddingを0に設定し、textContainerInsetをUIEdgeInsetsZeroに設定し、すべてのスクロール(scrollEnabled、バウンス、スクロールインジケーターなど)をオフにすると、UILabelと同様に表示されますが、制約の柔軟性はそれほど高くありません。それはドロップインの置き換えではありませんが、状況によっては許容できます。
アンパサンドの前のスペースを改行しないスペース(U + 00A0)に置き換えると、アンパサンドが同じ行に保持されるようです。ラベルのテキストの生成方法によっては、これを自動化するのは簡単ではない場合があります(場合によっては、2行目にアンパサンドが必要になることがあります)。