最近のプロジェクトで、自動調整ラベルの問題が常に発生しています:#
これは私を非常に困惑させますが、6 と 6p でのみ発生します。最初は自動調整の方法が間違っていると思いましたが、何度も書き直しても間違いはありませんでした...
問題はどこにあるのか、いつまでも見つけられません。
- 今日、グループで自動調整ラベルに関するコードを見かけ、質問しました。そして、このVerticallyAlignedLabelを見つけました。それから、喜んで試してみました。上に揃えられましたが、余分な部分はまだあります。
- では、問題はどこにあるのでしょうか?それから探しました。そして、このMultiline UILabel height with Autolayout higher in landscapeという stackoverflow の質問を見つけました。以前は常に中国語で検索していましたが、見つかりませんでした。英語に変えたら、類似の問題が見つかりました。他の人も同じ問題に直面していると思いました(私は愚かでした😢)。そして、objc.io でもIntrinsic Content Size of Multi-Line Textが出てきました。そして、それらの方法に従って修正しようと思いました。
- しかし、私は彼らの方法を直接使うことができませんでした。ビューを取り出して、それも tableViewcell の上のラベルでした。そして、私は言いました、それは幅の問題ですね、それを自動的に親のフレームに合わせる方法はありません、ここに正しいものを直接計算する方法はありません。さすがに自分自身に感心しました。そして、実行...
- くそったれ、まだだめだ、くそったれ、もう楽しいことはできない、もう生きたくない
-
ちょうどその時、私は突然気づきました。ラベルに値を設定する下に、1 行追加して、ラベルの間隔を増やすコードを追加しました。コメントアウトして、試してみて... うん、成功しました。興奮しないで、6p で試してみて、結果... 本当に成功しました。この瞬間の私は
-
最後の一歩が残っています。これまでたくさん変更しましたが、どこで効果があるのでしょうか?それともすべてが一緒に効果があるのでしょうか?最初のステップで作成したカスタムラベルを削除しました。うん、問題ありませんでした。フレームを計算する部分を削除しましたが、うまくいきませんでした。これで終わりです。午後中に 2 つのことだけをしました:a. 1 つの文を追加しました。b. 1 つの文を削除しました。
これが最初のコードです:#
これが最後のコードです:#
結論#
実際には、この原因は早く発見すべきでした。なぜなら、この問題は iPhone6/iPhone6p でのみ発生し、この条件はちょうど 5s の画面よりも広いスクリーンに対して適用されるからですが、私はそれについて考え続けませんでした。Ps(もし高さの計算が余分になる問題が発生した場合は、リンクの方法を試してみてください。高さが足りない場合は、0.1 を追加するのを忘れているかもしれません)
そして、私は確かに 1 つの文を書き忘れました。それはラベルの幅を設定するものです。なぜなら、私のビューは controller に viewDidLoad で追加されるからで、その時点では自動レイアウトがまだ終わっていないからです。***(Ps: 正常なフレームの設定は viewDidLayOutSubviews で行うべきです)** しかし、私は通常、viewDidLoad で作成し、作成時に直接フレームを指定しますので、ついに苦い結果を味わいました。