web-dev-qa-db-ja.com

iOS 11でUILabelの間違ったワードラップ

自動レイアウトなしでXIBを使用するアプリケーションに問題があります。これが重要な情報かどうかはわかりません。

Wordラップを使用した2行のUILabelがあります。 iOS 10では、ワードラップは正常に機能し、最初の行には1つのワードとアンパサンドなどの特殊文字が含まれていました。例:

UiLabel on ios 10

次に、iOS 11では、Wordラップが何らかの形で機能しなくなり、アンプレスを2行目に追加します。

UiLabel on ios 11

これは、通常2行目に収まる長い単語が正しく表示されないため、問題になります。何が変わったのでしょうか?私はsafeAreaについて知っていますが、それは理由のように見えません。そのアンパサンドをその上に十分なスペースがある最上部に移動する方法はありますか?

残りの設定: size inspector

36
studentbi

これはおそらくAppleによる未亡人の行を防ぐための意図的な変更である可能性があります。テキストの2番目の行に常に少なくとも2つの単語が含まれるように行を分割します。

ただし、この動作を無効にするドキュメントまたは方法がないことは驚くべきことです。

enter image description here

また、「未亡人」および「孤立した」テキストに関する 良い記事 もあります。

48
brynbodayle

引数を使用してアプリを起動する-NSAllowsDefaultLineBreakStrategy NO(文書化されていないデフォルト設定)は、古い動作に強制的に戻すようです。または、起動時にNSAllowsDefaultLineBreakStrategyNONSUserDefaultsに設定できます(AppleはYESまたは文字列描画コードが初期化されたときに、その値のUILabelのデフォルトを登録します。 NSArgumentDomainに入力するか、単にデフォルトを永続的に設定します)。

AppleはそのプライベートAPIを検討し、それを使用するアプリを拒否する場合があります。よく分かりません。私は配送アプリでこれを試していません。ただし、クイックテストでは機能します。NSUserDefaultsの設定を確認し、変更すると動作が変更されることがわかりました。

18
Carl Lindberg

これは実際には答えではありませんが、アンパサンドに関連するものではなく、それが一般的な問題であることを説明したいと思います。

two UILabels

これらのUILabelには両方とも同じ幅の制約があり、テキストはほとんど同じです。しかし、2番目には期待どおりのWordラップがあります。最初のものは正しくありません。「約」は明らかに最初の行にとどまることができます。

10
David Dunham

オプションとして、代わりにUITextViewを使用することもできますが、この動作はないようです。 NSTextContainer.lineFragmentPaddingを0に設定し、textContainerInsetをUIEdgeInsetsZeroに設定し、すべてのスクロール(scrollEnabled、バウンス、スクロールインジケーターなど)をオフにすると、UILabelと同様に表示されますが、制約の柔軟性はそれほど高くありません。それはドロップインの置き換えではありませんが、状況によっては許容できます。

1
Carl Lindberg

アンパサンドの前のスペースを改行しないスペース(U + 00A0)に置き換えると、アンパサンドが同じ行に保持されるようです。ラベルのテキストの生成方法によっては、これを自動化するのは簡単ではない場合があります(場合によっては、2行目にアンパサンドが必要になることがあります)。

1
Geoff Hackworth