問題タブ [intrinsic-content-size]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
html - レイアウトが安定するように、画像が読み込まれる前に画像サイズを固有に保つ方法は?
と属性を指定できるので、ブラウザーは最初に (少なくともヘッダーを) ダウンロードしなくても物理的なサイズを認識できる<img/>
といつも思っていました。しかし、どうやら属性は CSS プロパティとして扱われるようです。その後、画像がダウンロードされるまで、計算された高さは 0 のままです。
HTML/CSS を介して画像の物理的な寸法 (実質的にその縦横比) を明示的に設定する方法はありますか?width
height
width: 50%; height: auto
(...そして、「不明なアスペクト比のフラッシュ」/Masonry を使用する際の多くの神経質な再レイアウトを回避します。これはおそらく回避できますが、私は基本的な問題にもっと興味があります。質問するのに苦労している場合でもそれについて簡潔に:)
ios - UITableViewAutomaticDimension が有効になっている UITableView セルのカスタム UIView
私はUITableView
とUITableViewAutomaticDimension
いくつか持っていestimatedRowHeight
ます。このテーブルUITableViewCell
では、いくつかのラベルを含むカスタムUIView
とオーバーライドされたカスタムを使用していますintrinsicContentSize()
。制約の設定は正しく、テーブルは各行の実際の高さを決定できます。ここまでは順調ですね。
ここで、カスタムビューの内部ロジックを変更して、使用可能な幅に基づいて外観を調整し始めました。つまり、テーブルのセルサイズが十分に広くない場合、ビューは新しい制限に合わせてサブビューを再配置でき、これは結果の高さに影響を与えるため、次のようなコードがありますそれ:
ここで、テーブル ビューに入力すると、intrinsicContentSize()
目的の値が返されますが、現在のレイアウトには適していません。その後layoutSubviews()
、サイズが再計算され、システムが再度呼び出される場所に制御が移動し、intrinsicContentSize()
適切な値が返されます。ただし、最初のテーブルではデータが読み込まれ、セルの高さは正しくない値に基づいて計算されintrinsicContentSize()
ます。もう一度呼び出すreloadData()
と、すべてが正常になり、テーブル内の今後のすべてのセルのレイアウトも問題ありません。
私の間違いはどこにあり、コードを変更して、セルのサイズ変更をreloadData()
2 回呼び出すことなく正しく機能させる方法を教えてください。
ios - カスタム UINavigationBar - 本質的な高さの変更のアニメーション化
この特定のシナリオでは、私は実際には非常に混乱しています。私は UINavigationBar をサブクラス化し、Apple の古いサンプル コードに注目し、sizeToFit が呼び出されずにオーバーライドされ、必要な高intrinsicContentSize
さlayoutSubviews
を計算することに気付きました。私が提供するカスタム ビューに基づいて高さを計算する場合は、すべてうまく機能します (systemLayoutSizeFittingSize
カスタム コンテンツ ビュー/titleView に基づいて動的に高さを計算するために使用します)。
奇妙な部分は、変更をアニメーション化しようとすると、 custom の変更をアニメーション化できますが、をtitleView
介してintrinsicContentSizeをリロードするinvalidateIntrinsicContentSize()
と、ビューフレームの変更がアニメーション化されないことです。スナップします。
サンプルコード:
1 つの制約値の変更はアニメーション化されますが、残念ながら (navBars は自動レイアウトに依存していないため) フレームの更新に問題があるようです。固有のサイズを無効にする前に、フレームを直接更新しようとしましたが、成功しませんでした。また、高さの制約を試して、異なるタイミング オフセットを持つキー フレーム アニメーションにリストし、異なる時点でレイアウトを無効にしましたが、すべて成功しませんでした。どんな助けでも大歓迎です。
サイズ変更コードは次の場所にあります。
ios - 方法: iOS の StackView ビューを使用した XIB からのカスタム ビューのセルフ サイズ設定
私は最近、Swift を使用した iOS 開発に再び飛び込み始め、現在はカスタム UIControl を検討しています。レイアウトと柔軟性のために、このカスタム ビューは StackView を使用して構築されています。
達成したいこと...
...基本的には、スタックビューをストーリーボードに直接ドラッグしたときに通常持っているのと同じ機能を単純に持つことです-問題なく収まるようにサイズが変更されます。これは基本的に、自動サイズ設定のテーブルビュー セルと同じです。
ショーケース
CustomView を単純な例に減らすことができます。これは、3 つのラベルが , に設定されたStackViewAlignment
です。StackView は、左、右、および上部のレイアウト ガイド (または末尾、先頭、および上部) に固定されます。これは、XIB から読み込まれた CustomView を使用して簡単に再作成でき、同じパラメーターを持つ CustomView に変換されます。両方をスクリーンショットとして添付しました。Center
Distribution
Equal Centering
XIB ファイルを読み込んでセットアップします。
ここでわかるのは、XIB ファイルをロードし、レイアウトのサブビューをオーバーライドして、フレームを実際のビューに適応させるだけです。
質問
したがって、私の質問は、これが通常どのようにアプローチされるかに関連しています。私の StackView のラベルには固有のコンテンツ サイズがあります。つまり、通常、StackView は文句を言わずにラベルの高さに適応します - ストーリーボードで設計する場合。ただし、すべてを XIB に入れてレイアウトをそのままにしておくと、そうではありません。ビューがスクリーンショットのように 3 つの方法 (上、先頭、末尾) に固定されている場合、IB は不明な高さについて文句を言います。
私は Auto-Layout Guide を読み、WWDC ビデオの "Mysteries of AutoLayout" を見ましたが、このトピックはまだ私にとってまったく新しいものであり、まだ正しいアプローチができていないと思います。だからここは私が助けを必要としているところです
(1) 制約を設定して無効にする必要がありtranslatesAutoresizingMaskIntoConstraints
ますか?
私が最初にできることとすべきことは、 translatesAutoresizingMaskIntoConstraints
false
自動生成された制約を取得しないように設定し、独自の制約を定義することです。したがって、次のように変更できますloadNib
。
基本的に、ストーリーボードの UIView の全幅に収まるようにビューを引き延ばし、StackView の上下から上下に制限しました。
これを使用するとXCode 8がクラッシュするという問題がたくさんあったので、どうすればよいかわかりません。
(2)またはオーバーライドする必要がありますintrinsicContentSize
か?
intrinsicContentSize
また、すべての高さを確認してオーバーライドしarrangedSubviews
、最も高いものを取得して、ビューの高さをそれに設定することもできます。
これにより確かに柔軟性が向上しますが、固有のコンテンツサイズを無効にする必要があるため、動的タイプや、避けたい他の多くのものを確認してください。
(3)「提案された」方法でXIBをロードしていますか?
または、より良い方法がありUINib.instantiate
ますか? 私は本当にそれを行うためのベストプラクティスの方法を見つけることができませんでした.
(4) そもそもなぜこれをしなければならないのですか?
ほんとに?なんで?StackView を CustomView に移動しただけです。では、StackView が適応を停止したのはなぜですか? なぜ上部と下部の制約を設定する必要があるのでしょうか?
これまでのところ最も役に立ったのは、https://stackoverflow.com/a/24441368のキーフレーズです。
「一般に、自動レイアウトはトップダウン方式で実行されます。つまり、親ビューのレイアウトが最初に実行され、次に子ビューのレイアウトが実行されます。」
..しかし、私はそれについて本当によくわかりません。
(5) コードに制約を追加する必要があるのはなぜですか?
無効にするとtranslatesAutoresizingMaskIntoConstraints
、IBのテーブルビューセルのような制約を設定できませんか? これは常に label.top = top のようなものに変換されるため、サイズ/高さを継承する StackView の代わりにラベルが引き伸ばされます。また、XIBファイルのIBのコンテナビューにStackViewを実際に固定することはできません。
誰かが私を助けてくれることを願っています。乾杯!