今是昨非

今是昨非

日出江花红胜火,春来江水绿如蓝

AutoLayoutの自動調整に関する問題

最近のプロジェクトで、自動調整ラベルの問題が常に発生しています:#

image1

image2

これは私を非常に困惑させますが、6 と 6p でのみ発生します。最初は自動調整の方法が間違っていると思いましたが、何度も書き直しても間違いはありませんでした...
問題はどこにあるのか、いつまでも見つけられません。

  1. 今日、グループで自動調整ラベルに関するコードを見かけ、質問しました。そして、このVerticallyAlignedLabelを見つけました。それから、喜んで試してみました。上に揃えられましたが、余分な部分はまだあります。
  2. では、問題はどこにあるのでしょうか?それから探しました。そして、このMultiline UILabel height with Autolayout higher in landscapeという stackoverflow の質問を見つけました。以前は常に中国語で検索していましたが、見つかりませんでした。英語に変えたら、類似の問題が見つかりました。他の人も同じ問題に直面していると思いました(私は愚かでした😢)。そして、objc.io でもIntrinsic Content Size of Multi-Line Textが出てきました。そして、それらの方法に従って修正しようと思いました。
  3. しかし、私は彼らの方法を直接使うことができませんでした。ビューを取り出して、それも tableViewcell の上のラベルでした。そして、私は言いました、それは幅の問題ですね、それを自動的に親のフレームに合わせる方法はありません、ここに正しいものを直接計算する方法はありません。さすがに自分自身に感心しました。そして、実行...
  4. くそったれ、まだだめだ、くそったれ、もう楽しいことはできない、もう生きたくない

image3

  1. ちょうどその時、私は突然気づきました。ラベルに値を設定する下に、1 行追加して、ラベルの間隔を増やすコードを追加しました。コメントアウトして、試してみて... うん、成功しました。興奮しないで、6p で試してみて、結果... 本当に成功しました。この瞬間の私は

  2. 最後の一歩が残っています。これまでたくさん変更しましたが、どこで効果があるのでしょうか?それともすべてが一緒に効果があるのでしょうか?最初のステップで作成したカスタムラベルを削除しました。うん、問題ありませんでした。フレームを計算する部分を削除しましたが、うまくいきませんでした。これで終わりです。午後中に 2 つのことだけをしました:a. 1 つの文を追加しました。b. 1 つの文を削除しました。

これが最初のコードです:#

image5

これが最後のコードです:#

image6

結論#

実際には、この原因は早く発見すべきでした。なぜなら、この問題は iPhone6/iPhone6p でのみ発生し、この条件はちょうど 5s の画面よりも広いスクリーンに対して適用されるからですが、私はそれについて考え続けませんでした。Ps(もし高さの計算が余分になる問題が発生した場合は、リンクの方法を試してみてください。高さが足りない場合は、0.1 を追加するのを忘れているかもしれません)

そして、私は確かに 1 つの文を書き忘れました。それはラベルの幅を設定するものです。なぜなら、私のビューは controller に viewDidLoad で追加されるからで、その時点では自動レイアウトがまだ終わっていないからです。***(Ps: 正常なフレームの設定は viewDidLayOutSubviews で行うべきです)** しかし、私は通常、viewDidLoad で作成し、作成時に直接フレームを指定しますので、ついに苦い結果を味わいました。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。