問題タブ [nslayoutconstraint]

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.

0 投票する
2 に答える
1925 参照

ios - UILabel が余分な行を「成長」させるための NSLayoutConstraint

私は を持っており、固定幅と可変高さがではなくUILabelに依存するように設定したいと思います。textsuperView

つまり、text「Hello World」の場合です。その場合、ラベルは...

また、text「これは数行にわたる非常に長いテキストです」の場合。するとラベルは…

を使用して固定幅を既に設定し、 0NSLayoutConstraintに設定numberOfLinesしましたが、1 行の高さを維持し、テキストを省略記号で連結します。

「contentResistance」というものがあることは知っていますが、名前や使い方がわかりません。

これは可能ですか?

0 投票する
6 に答える
25895 参照

ios - 制約を使用してプログラムでtitleViewを作成する(または通常、制約を使用してビューを作成する)

次のような制約を使用してtitleViewを作成しようとしています。

titleView

フレームを使ってこれを行う方法を知っています。テキストの幅、画像の幅を計算し、その幅/高さで両方を含むビューを作成してから、フレームを使用して適切な場所に両方をサブビューとして追加します。

制約を使用してこれを行う方法を理解しようとしています。私の考えでは、本質的なコンテンツサイズがここで私を助けてくれるだろうと思っていましたが、私はこれを機能させるために乱暴にぶらぶらしています。

titleViewのサイズをハードコーディングする必要はありません。中身の大きさで判断できるはずですが…

  1. titleViewは、フレームをハードコーディングしない限り、サイズが0であると判断しています。
  2. translatesAutoresizingMaskIntoConstraints = NOこのエラーでアプリがクラッシュするように設定した場合:'Auto Layout still required after executing -layoutSubviews. UINavigationBar's implementation of -layoutSubviews needs to call super.'

アップデート

このコードで動作するようになりましたが、それでもtitleViewでフレームを設定する必要があります。

0 投票する
1 に答える
95 参照

iphone - コードとIB間のNSLayoutContraintsの編成

これはよくある問題だと思います。UINavigationバーを備えたUIViewControllerとContentView(UIViewと一連の子コントロールを含む)があります。ユーザーは左にスワイプしてこのコンテンツビューを非表示にし、画面の左側からアニメーション化できます。ナビゲーションが必要です。バーを展開して幅全体を埋めます。これら2つをInterfaceBuilderとリンクすることはできないため、コードで行う必要があります。問題ありません。

切り取られたそのコードはそれをうまくやるはずです。問題は、UINavigationBarをIBにレイアウトして、カスタマイズしたボタンを簡単に追加して表示できるようにすることです。問題は、ナビゲーションバーをIBにレイアウトすると、IBが大量のナビゲーションバーを追加することです。削除できないデフォルトの制約。そのうちの1つは、上記のコードで追加したものと競合しています。

これをどのように回避しますか?これが私が思いついた3つの可能性です:

1.)プログラムでUINavigationバーを作成することもできます。このように、私が追加した制約のみがあります。私はこのようにしたくないのですが、それはオプションです

2.)IBを使用して、デフォルトの制約を削除して、衝突しないようにします。これを行う方法がわかりません

3.)コードで、IBがUINavigationバーに追加するデフォルトの制約を削除してから、カスタム制約を追加します。removeConstraintとremoveConstraintsがあることがわかります。制約を取得して削除してから、独自の制約を追加できると思います。繰り返しますが、ちょっと長い厄介なプロセスです。

あなたの意見は何ですか?あなたは同じようなことをしましたか?

0 投票する
1 に答える
2071 参照

objective-c - 例外をスローする自動レイアウト制約

テーブル ビュー セルにロードしているフィールドで自動レイアウトを使用しています。セルごとに、contentView からすべてのサブビューをクリアし、必要なフィールドのタイプに基づいて独自のビューを読み込みます。ほとんどのセルは問題ありませんが、このセルが表示されると、例外が発生します。

セルのコードは次のとおりです。

この場合、 にはアイテムが 1 つしかありませんself.field.answers。フォントは、以下で使用されているものと同じ値です。

セルの高さのコードは次のとおりです。

以下は、UIButton である ToggleButton の内部を作成するコードです。

ここに私が得ている例外の読み出しがあります:

すべての高さが加算されるため、例外が発生する理由がわかりません。このシナリオは、他のいくつかの細胞タイプで発生しているため、洞察があれば役立ちます.

0 投票する
1 に答える
1928 参照

ios - InterfaceBuilderで2つのビューの間に固定スペースを設定する

Interface Builderでレイアウト制約を使用する方法を学ぼうとしていますが、問題が発生しています...

UILabelとUIImageViewの2つのビューがあり、次のようなレイアウトが必要です。

  1. ラベルはスーパービューの中央に配置する必要があります
  2. imageviewは、ラベルの左側に設定された距離である必要があります

非常に単純なようですが、2番目の条件に制約を課す方法がわかりません(最初の条件は自動的に行われます)。誰もがこれを行う方法を知っていますか?

ありがとう!

0 投票する
2 に答える
85 参照

uiscrollview - IB での自動制約の削除

インターフェイス ビルダーで UIScrollView のコンテンツを作成しています。uiview は uiscrollview 内にあり、次のプロパティがあります。

  • トップからスーパービューへ
  • 一番下からスーパービュー
  • スーパービューのまま
  • 幅: 1536

しかし、何らかの理由で自動制約「right: -768」を削除できません。これを追加する必要があると考える理由はわかりますが、そのビューの左側をスーパービューの左側に制約するように設定し、絶対幅を設定しました. きっと削除できるはずですよね?

ビューをスクロールしようとすると、-768 が追加され、スクロール ビューの 2 ページ目が表示されなくなり、代わりにゴーストの「3 ページ目」が表示されるという厄介なバグが発生します。

0 投票する
2 に答える
611 参照

objective-c - NSLayoutConstraints の競合

既にビューにある NSTextField の下のビューにプログラムでボタンを追加しようとしています。ビューは IB で作成され、制約を使用します。これは NSTableCellView ですが、この場合は違いがあるとは思えません。したがって、私のコードは次のとおりです。

addConstraint 呼び出しを実行すると、ボタンは問題なく追加されます (適切な場所にないだけです)。addConstraint 呼び出しを使用すると、デバッグ コンソールで制約の競合に関する多くのメッセージが表示され、IB で作成した制約の一部が破損します。

明らかに私は何か間違ったことをしています。新しいボタンの上部が前のビューまたはボタンの下部より 2 ピクセル下にある必要があるという制約があると予想しました。それが衝突を引き起こすべきではないように思われるので、私はどこにいるのでしょうか?

0 投票する
4 に答える
75860 参照

ios - プログラムによる制約の設定

UIScrollView の使用方法を実験しています。苦労の末、やっとコツをつかめました。しかし今、私は別の障害にぶつかったようです。

この単純なアプリでは、スクロール ビューがあり、それを機能させるには、ここで説明されているようにビューの下部スペースを scrollview 制約に 0 に設定する必要があり、正常に動作します。私はIBを通してそれをやっています。

今、私はその部分をプログラムで実行しなければならないシナリオに出くわしました。メソッドに以下のコードを追加しましたviewDidLoad

しかし、うまくいかないようです。コンソール ウィンドウに次のメッセージが出力され、どうすればよいかわかりません。

制約を同時に満たすことができません。おそらく、次のリストの制約の少なくとも 1 つが望ましくないものです。これを試してみてください: (1) 各制約を見て、どれが予期しないものかを把握してみてください。(2) 不要な制約を追加したコードを見つけて修正します。(注: 理解できない NSAutoresizingMaskLayoutConstraints が表示されている場合は、UIView プロパティ translatesAutoresizingMaskIntoConstraints のドキュメントを参照してください) ( "", "" )

誰かがこれを行う方法を教えてもらえますか? この問題についてよりよく理解できるように、ここにデモ プロジェクトも添付しました。

アップデート:

まず、応答に感謝します。回答に記載されている方法を使用して、機能させることができました。ただし、わずかに異なるシナリオではそうではありません。現在、プログラムでビューをビューコントローラーにロードしようとしています。

さらに説明することがあれば。2 つのビュー コントローラーがあります。最初のものは aUITableViewControllerで、2 つ目は aUIViewControllerです。その中にUIScrollView. また、複数UIViewの があり、それらのビューの一部の高さが画面の通常の高さを超えています。

オプションのUITableViewControllerリストが表示されます。ユーザーの選択に基づいてUIView、ロットから特定の 1 つが にロードされUIViewControllerますUIScrollView

このシナリオでは、上記の方法は機能しません。スクロールは起きていません。ビューを個別にロードしているため、別のことをする必要がありますか?

デモ プロジェクトをここにアップロードして、動作を確認できるようにしました。を参照して、テーブル ビュー リストから[電子メール]Email.xibを選択してください。