問題タブ [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 投票する
1 に答える
8151 参照

ios - 制約を使用してコンテンツビューの中央に配置されたサブビュー

2つのサブビューを持つコンテンツビューがあります。サブビューを垂直方向に積み重ね、コンテンツビューで水平方向(x軸)の中央に配置しました。

次に、それらを垂直方向(y軸)の中央に配置します。buttonViewの上部とラベルビューの下部から同じスペースが必要です。

どうやってやるの?優先順位のある上下の制約?

編集:

スコット、あなたが提案したコードがどのように見えるかを次に示します。

buttonViewが遠すぎます

buttonViewとlabelの間に間隔を空けてみましたが、役に立ち-1-ませんでした。そしてこれは私がそれを見るのに必要な方法です:

ここに画像の説明を入力してください

これを実現するために使用したコードは次のとおりです。

私の制約は機能しますが、ハードコーディングされているため、可能であれば遠ざけることをお勧めします。

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

xcode - CGRectMake 元の位置に戻しますか?

以下を使用して、XIB/ストーリーボードに配置された元の位置から UIView を移動します: -(void)myMovingViewAction{

私が抱えている問題は、ストーリーボード UIViewController/XIB に配置されているように、UIView を元の位置に戻すことです。

上記と同じコードを元の座標で使用できることはわかっていますが、これらの座標はデバイスによって異なります。この例では、制約により、UIViewController の下部に UIView が元の位置で固定されています。

このビューを「デフォルト」の位置に戻す方法はありますか?

前もって感謝します!:)

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

ios6 - Autolayout を使用して IB で作成されたビューをアニメーション化する

IBでは複雑すぎるため、コードで作成されたラベルとボタンがたくさんあるビューがあります。これは正常に動作します。

IBでは、ボタンをタップして下から表示したい入力ビューも作成しました。もしそうなら、キーボードに非常に似ています。この入力ビューは前方にあるため、IB で作成され、スライダー、ラベルなどが含まれています。IB の self.view のサブビューとして追加していません。

ボタンをタップして、入力ビューのすべての制約を設定します。幅を設定し、self.view の下部に垂直サイズで設定してから、この制約を削除し、実際の高さを追加して、次に、[self.view layoutIfNeeded] でアニメーション化します。

問題は、入力ビュー自体は正しくアニメーション化されますが、そのサブビューはそれほどアニメーション化されないということです。それらは一度に現れます。

スイッチを1つだけ使用して、プログラムで入力ビューを追加しようとしました。それはかなりうまくアニメーション化します。

コントロールとそのスーパービューの間の制約に問題があると推測しています。しかし、私はそれについて確信が持てません。なぜなら、それらは正しくアニメーション化されていませんが、正しい場所にあり、正しいプロポーションを持っているからです。ここで何かが足りないと思います。IB セットのコントロールとビューを混在させてプログラムで変更するのは得策ではないでしょうか?

誰かがそれについて何か経験がありますか?

前もって感謝します、

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

iphone - Apple は自動レイアウト警告で私のアプリを拒否しますか?

iOS 6向けのiPhoneアプリを作ってみた

私のアプリは非常にスムーズに動作し、アプリの起動中やアプリ内のどこでもクラッシュはありません..しかし、私のアプリはautolayout.

この警告を解決するために多くのことを試みましたが、成功しませんでした..

NSLog の警告:

この警告のために、アプリを App Store に提出すると拒否されますか?

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

iphone - 単一の制約による自動レイアウト制約エラー

ラベルとボタンがたくさんあるシーンがあります。ボタンをタップすると、コントロールを含むビューが下から上にスライドします。いわばキーボードのようなものです。次のように「見えます」:

この「キーボード」は、ビューがロードされ、アニメーションが完了し、その高さを 0 から固有のコンテンツ サイズに切り替える最初の段階で作成されます。この escene はランドスケープ モードのみをサポートし、デバイスが 180 度回転したときに "キーボード" をビューに表示し続けるのにかなりの時間がかかりました。

私が見る問題は、次の 2 つの状況のいずれかで発生します。

  1. デバイスは 180 度回転します。
  2. 「キーボード」と呼ばれます。

この問題は次のとおりです。

エラー ログには、ボタン スライダーのセットごとに 1 回ずつ、このエラーが 2 回表示されます。

私が奇妙だと思うのは、矛盾する制約がまったく同じであることです。コピペミスをして同じ制約を2回追加したと思ったのですが、そうではありません。

回転時に updateViewConstraints が呼び出されることと、アニメーションを実行することと関係があると思いますが、この「キーボード」ビューには他にもいくつかあるため、これらの制約のみが影響を受ける理由はわかりません。

結局のところ、この Autolayout は、Apple が主張するよりもかなり難しいものです。もちろん、私の意見では。

何か案は?

編集: 制約はすべて、主にビジュアル言語形式を使用してコードで設定されます。「キーボード」内のコントロールの制約は、「キーボード」ビューに追加されます。これは通常行うことだと思います。

試してみるために、問題のある制約を変更し、それらを「キーボード」サブビューに追加する代わりに、self.view (「キーボード」スーパービュー) に追加しました。突然、エラーが表示されなくなりました。

それにもかかわらず、何が問題なのかまだわからず、幸運なショットを打っただけなので、この問題について議論したいと思います. 私は本当にそれを理解したいです。

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

ios - 単純なアニメーションでサブビューを追加するときに NSLayoutConstraints を使用する

ビュー (messageView) をメニュー項目 (messageViewMenu) に追加しようとしているので、メニュー項目がタップされたときに、この新しいビューがそのすぐ上に追加され、両方が画面を一緒に下にスライドします - Evernote 5.1 .2 にも似たようなものがあります。

NSLayoutConstraint を使用して、新しいビューをメニュー項目の上部にあると想定するものにアタッチしています。次に、メニュー項目の既存の垂直方向の制約をヘッダー UIView (_headerMessageConstraint) にアニメーション化して、サイズ 300 に拡大します。新しいビューは、メニュー項目の前縁に後縁で垂直に取り付けられ、画面を下にスライドすることを期待します。一緒。

ただし、新しいビューはメニュー項目と共に下にスライドし、上端が揃ったように見えるまでその後ろに続きます。

誰が私が間違っているのか教えてもらえますか? よろしくお願いいたします。

スティーブ

編集。これを投稿してから、新しいビュー (MessageViewController の mvc.view) を追加すると、デフォルトで 0,0 に配置されることがわかりました。ただし、0,0にしたくないので、表示したい場所にフレームを設定する必要があるようです-自動レイアウトを使用すると間違っているようです-または、この新しいビューをサブビューに追加しますおそらく、サブビューの高さをアニメーション化します...ここで暗い場所に自分自身を話しているかもしれませんが.

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

ios - NSLayoutConstraints を使用して UIView を移動する際に必要なアドバイス

下の画像から、ユーザーがview1をタップすると、view2とview3がフッターにスライドダウンし、フッターでview3の制約定数を0(っぽい)に設定することで効果的に引っ張られます。最初の画像に示すように、制約を使用して xib をセットアップしました。[今の私にとって] 最も重要な 2 つは、view1View2 制約と view3Footer 制約です。

制約とビューを持つ xib

スライド ダウンを実現するために、view1view2 制約の優先度を低く設定し、view3Footer 制約の優先度を高く設定してから、animateWithDuration で view3Footer 制約定数を更新しました。

スライドダウン成功

私の問題は、view2 と view3 を上にスライドさせることです。これは、同じ方法を使用していた場合、view1view2 制約定数を 2 に設定することで達成できます。

上記のスライドアップの問題は、view1View2 制約よりも view3Footer 制約の優先度が高いことだと思います。優先度は読み取り専用のように見えるため、これらを具体的に変更することはできません。制約の設定では、ビューの配置のみを要求していることを理解しています。

...完全に間違った方法を使用している可能性があると思います...

私はこれを正しい方法で行っていますか?制約オブジェクト IBOutlet を取得して書き直す必要がありますか? もしそうなら、私は優先順位を書き直していますか?優先度が等しい定数に >= を使用する必要がありますが、機能していないようです。単純にアニメーション化するための私のコードは以下のとおりです。これは大したことではありませんが、ジェスチャ認識機能を除けば、セットアップは主に xib にあります。

どんな助けでも大歓迎です。ありがとう、スティーブ

スライドダウンの場合:

UPDATEまた、この設定の優先順位が等しくなるようにしました-スライドダウンを達成できなくなりました

スライドアップの場合:

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

ios - 自動レイアウトの制約

ポートレートモードではビューを垂直方向に中央に配置し、ランドスケープモードでは右に移動する必要があります (たとえば、150 ピクセル)。

いくつかの制約を設定しようとしましたが、それを突き止めることができないようです:

これは横向きモードでは機能しますが、縦向きモードでは機能しません。縦向きでは、左側の制約 (570@700) が失敗し、左側の制約 (257@800) が成功し、中央の X は実装されません。最初のセット (570@700 と 257@800) が両方とも失敗して、中央の X 制約に頼ることができるようにする必要があります。

または、centerX 制約を破棄する必要がありますか?

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

uiview - UIView サブビューの自動サイズ変更

進行状況の HUD を表示するために、小さな UIView サブクラスを作成しました。その HUD ビューは完璧に機能しますが、ここ数日でちょっとした問題に直面しました。

私のアプリケーションでは、カスタムの方法で UIViewController を提示しています。ユーザーがtableViewで行を選択すると、2番目のviewControllerのインスタンスを作成し、それを現在のVCに移動し、ビューの高さをゼロに設定し、現在のVCのビューのサブビューとして追加します(選択したセル)、高さをアニメートして元に戻します。

動作はかなりクールに見え、うまく機能します。

しかし、2 番目のビューがサブビューとして追加されると、このビューに HUD が追加されます。2 番目のビューが元の高さにサイズ変更されると、HUD はビューの上部に固定され、高さはわずか数ピクセルになります。 ここに画像の説明を入力

私は NSLayoutConstraints を少しいじってみました...しかし、今までうまくいきませんでした...

誰かがそれについて良い考えを持っていますか? または、これらの制約に関する適切で十分に説明されたリソースを知っている人はいますか?

HUD は、実際にはサブビューとして小さなウィンドウを持つバックグラウンド ビューです。他のすべての要素 (進行状況ビュー、ラベルなど) は、小さなウィンドウのサブビューです。

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

ios - setFrameをアニメーション化する方法:Objective-Cの自動レイアウトを使用

私はiOS(6)アプリで作業しており、サイズを変更(アニメーション化)したビューがあり、そのビュー内にUILabelがあります。これは、ビューとともに拡大したいのですが、比例的には拡大しません。

つまり、ビューが特定のサイズの場合、たとえばビューの90%を占める必要がありますが、(別の特定のサイズに)大きくすると、80%などのビューのみを占めるようにします。これは、スーパービューが大きくなると表示されるUILabel周辺の他のサブビューに対応するためです。

これでNSLayoutContraintsを使用して、先頭のスペースを必要なサイズに設定し、UILabelの幅を設定して適切に拡大してみました。また、先頭と末尾のスペースを設定してみました(その後、幅は自動的に拡大します)。

奇妙なことに、同じアニメーションコードブロック(UIView animateWithDuration:...を使用)にNSLayoutContraintsを使用している他のサブビューがあり、それらはすべて機能します。ただし、これらはすべて間隔の制約であり、サイズの制約ではなく、UILabelが関係するものはないため、これがそれと関係があるかどうかはわかりません...

次に、UILabelのtranslatesAutoresizingMaskIntoConstraints = YESを設定し、ラベルにsetFrame:を使用してみました。これにより、ラベルのサイズと位置が正確に設定されますが、変更はアニメーション化されないため、ひどいように見えます...

他の誰かがこのようなことや私を助けるためのアイデアを経験したことがありますか?

ありがとう

以下は、私が試したコードです。ここで、「left」はラベルの先頭のスペース制約であり、「width」はラベルの幅制約です。

setFrameメソッドは、親ViewControllerからアニメーションコードブロック内で呼び出されます。