タグ付けされた質問 「nslayoutconstraint」

NSLayoutConstraintは、制約ベースのレイアウトシステムが満たす必要のある2つのユーザーインターフェイスオブジェクト間の関係を定義する制約です。iOS 6.0以降のUIKitで利用可能であり、OS Xv10.7以降のAppKitで利用可能です。

16
Swiftを使用してプログラムで制約を追加する方法
これ以上先に進めずに先週からこれを理解しようとしています。[OK]をので、私はいくつかの適用する必要があり、制約を プログラム的にスウィフトにUIViewこのコードを使用します: var new_view:UIView! = UIView(frame: CGRectMake(0, 0, 100, 100)); new_view.backgroundColor = UIColor.redColor(); view.addSubview(new_view); var constX:NSLayoutConstraint = NSLayoutConstraint(item: new_view, attribute: NSLayoutAttribute.CenterX, relatedBy: NSLayoutRelation.Equal, toItem: self.view, attribute: NSLayoutAttribute.CenterX, multiplier: 1, constant: 0); self.view.addConstraint(constX); var constY:NSLayoutConstraint = NSLayoutConstraint(item: new_view, attribute: NSLayoutAttribute.CenterY, relatedBy: NSLayoutRelation.Equal, toItem: self.view, attribute: NSLayoutAttribute.CenterY, multiplier: 1, constant: 0); self.view.addConstraint(constY); …

2
setNeedsLayoutとsetNeedsUpdateConstraintsおよびlayoutIfNeededとupdateConstraintsIfNeeded
自動レイアウトチェーンは基本的に3つの異なるプロセスで構成されることを知っています。 制約の更新 レイアウトビュー(ここでフレームの計算を取得します) 表示 何は、私には全く明らかではないとの内側の差です-setNeedsLayoutと-setNeedsUpdateConstraints。Apple Docsから: setNeedsLayout ビューのサブビューのレイアウトを調整する場合は、アプリケーションのメインスレッドでこのメソッドを呼び出します。このメソッドはリクエストを記録し、すぐに戻ります。このメソッドは即時の更新を強制せず、代わりに次の更新サイクルを待機するため、これらのビューを更新する前に、このメソッドを使用して複数のビューのレイアウトを無効にすることができます。この動作により、すべてのレイアウト更新を1つの更新サイクルに統合できます。これは通常、パフォーマンスの点で優れています。 setNeedsUpdateConstraints カスタムビューのプロパティが制約に影響を与える方法で変更された場合、このメソッドを呼び出して、将来のある時点で制約を更新する必要があることを示すことができます。次に、システムはupdateConstraintsを通常のレイアウトパスの一部として呼び出します。制約が必要になる直前に一度に更新することで、レイアウトパス間でビューに複数の変更が加えられたときに、不必要に制約を再計算する必要がなくなります。 制約を変更した後でビューをアニメーション化し、通常は変更をアニメーション化する場合は、たとえば次のようにします。 [UIView animateWithDuration:1.0f delay:0.0f usingSpringWithDamping:0.5f initialSpringVelocity:1 options:UIViewAnimationOptionCurveEaseInOut animations:^{ [self.modifConstrView setNeedsUpdateConstraints]; [self.modifConstrView layoutIfNeeded]; } completion:NULL]; すべてを使用するのでは-setNeedsLayoutなく-setNeedsUpdateConstraints期待どおりに機能する場合は、を使用して変更-layoutIfNeededする-updateConstraintsIfNeededとアニメーションが発生しないことがわかりました。 私は自分の結論を出そうとしました: -updateConstraintsIfNeeded 制約を更新するだけで、レイアウトを強制的に実行しないため、元のフレームは保持されます -setNeedsLayout-updateContraintsメソッドも呼び出す では、一方を他方の代わりに使用してもよいのはいつですか?レイアウトメソッドについては、制約が変更されたビューまたは親ビューで呼び出す必要がありますか?

15
自動レイアウトを使用してテキストに展開するUITextView
プログラムで自動レイアウトを使用して完全にレイアウトされたビューがあります。ビューの中央にUITextViewがあり、その上下にアイテムがあります。すべてが正常に動作しますが、テキストが追加されたときにUITextViewを展開できるようにしたいと考えています。これにより、拡張時に下にあるすべてが押し下げられます。 私はこれを「スプリングとストラット」の方法で行う方法を知っていますが、これを行う自動レイアウト方法はありますか?私が考えることができる唯一の方法は、成長する必要があるたびに制約を削除して再度追加することです。

16
制約を同時に満たすことができないため、制約を解除して回復を試みます
以下は、デバッグ領域に表示されるエラーメッセージです。正常に実行され、このエラーが表示されること以外は問題はありません。これはアップルがアプリを受け入れるのを妨げますか?どうすれば修正できますか? 2012-07-26 01:58:18.621 Rolo[33597:11303] Unable to simultaneously satisfy constraints. Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint …

13
NSLayoutConstraintの乗数プロパティを変更できますか?
1つのスーパービューに2つのビューを作成し、ビュー間に制約を追加しました。 _indicatorConstrainWidth = [NSLayoutConstraint constraintWithItem:self.view1 attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:self.view2 attribute:NSLayoutAttributeWidth multiplier:1.0f constant:0.0f]; [_indicatorConstrainWidth setPriority:UILayoutPriorityDefaultLow]; _indicatorConstrainHeight = [NSLayoutConstraint constraintWithItem:self.view1 attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:self.view2 attribute:NSLayoutAttributeHeight multiplier:1.0f constant:0.0f]; [_indicatorConstrainHeight setPriority:UILayoutPriorityDefaultLow]; [self addConstraint:_indicatorConstrainWidth]; [self addConstraint:_indicatorConstrainHeight]; アニメーションでマルチプライヤプロパティを変更したいのですが、マルチプライヤプロパティを変更する方法がわかりません。(ヘッダーファイルNSLayoutConstraint.hのプライベートプロパティに_coefficientが見つかりましたが、プライベートです。) 複数のプロパティを変更するにはどうすればよいですか? 私の回避策は、古い制約を削除して、の値が異なる新しい制約を追加することですmultipler。

6
iOS:新しいautolayout制約(高さ)をアニメーション化する方法
これまでにautolayout制約を扱ったことはありません。私が作業している小さな新しいアプリがあり、NIBのビューがデフォルトで自動レイアウトになっていることに気付きました。それで、私はそれを使って作業する機会を得て、Appleがこれでどこに向かっているのかを理解しようとするだろうと考えました。 最初の課題: MKMapViewのサイズを変更する必要があり、それを新しい位置にアニメーション化したいと思います。私が慣れている方法でこれを行うと: [UIView animateWithDuration:1.2f animations:^{ CGRect theFrame = worldView.frame; CGRect newFrame = CGRectMake(theFrame.origin.x, theFrame.origin.y, theFrame.size.width, theFrame.size.height - 170); worldView.frame = newFrame; }]; ...その後、兄弟ビューが更新されるたびにMKMapViewが元の高さに「スナップ」します(私の場合、UISegmentedControlのタイトルが更新されています[myUISegmentedControl setTitle:newTitle forSegmentAtIndex:0])。 だから、私は考えて私がやりたいことは、それがあることUISegmentedControlの先頭に相対的であることに、親ビューの絶頂に等しいからMKMapViewの制約を変更されたカバーします:V:[MKMapView]-(16)-[UISegmentedControl] MKMapViewの高さを短くして、マップビューの下の一部のコントロールが表示されるようにしたいのですが。これを行うには、固定フルサイズビューから、UISegmentedControlの上部が下部に制限されているビューに制限を変更する必要があると思います。ビューが新しいサイズに縮小するときにアニメーションを表示したいと思います。 これをどうやってやるの? 編集- このアニメーションはされていないアニメーションビューの下部には、170を瞬時に動かすんが。 [UIView animateWithDuration:1.2f animations:^{ self.nibMapViewConstraint.constant = -170; }]; そしてnibMapViewConstraint下の垂直方向のスペースの制約にIBにまで配線されています。

7
自動レイアウト:トップレイアウトガイドではなくスーパービューに制約を追加しますか?
ストーリーボードのUIViewControllerにUIViewがあり、上端からの距離を表示するスペースに制約を追加したい。 これで、通常の操作をCtrl + ViewControllerのメインビューにドラッグすると、トップレイアウトガイドに設定するオプションのみが表示されます。 これは私にとって問題です。アプリのある時点でメインビューを20-50pxほど上に移動しようとすると、そのビューは移動しません...スーパービューに位置合わせされていないためです。 ストーリーボードでこれを手動で行うにはどうすればよいですか、またはプログラムで追加する必要がありますか? 私はxcode 6を使用しています。

6
ビューが削除されたときに制約で何が起こるか
私の質問は単純ですが、ドキュメントに情報が見つかりませんでした。 ビューがビュー階層から削除される(または別のビューに移動される)と、レイアウト制約はどうなりますか? たとえば、CサブビューAとのコンテナがあるとしBます。コンテナにCはいくつかの制約があります。次にを呼び出します[A removeFromSuperview]。何がための制約で起こりますかA? 再度追加AするCとどうなりますか?

10
UITableViewCellのiOS7での自動レイアウト制約の問題
プログラムで自動レイアウト制約を使用してカスタムUITableViewセルをレイアウトし、セルサイズを正しく定義しています tableView:heightForRowAtIndexPath: これは、iOS6にうまく働いていますし、それはありませんルックにもiOS7に罰金を しかし、iOS7でアプリを実行すると、コンソールに次のようなメッセージが表示されます。 Break on objc_exception_throw to catch this in the debugger. The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful. 2013-10-02 09:56:44.847 Vente-Exclusive[76306:a0b] Unable to simultaneously satisfy constraints. Probably at least one of the constraints in the following list is one you …

8
いつレイアウト制約をアクティブ化/非アクティブ化できますか?
IBで複数の制約セットを設定しましたが、状態によってプログラムでそれらを切り替えたいのですが。ありますconstraintsAIBからインストールとしてマークされているすべてのそれらの出口コレクションは、およびconstraintsBすべての出口コレクションは、IBにアンインストールされます。 次のように、プログラムで2つのセットを切り替えることができます。 NSLayoutConstraint.deactivateConstraints(constraintsA) NSLayoutConstraint.activateConstraints(constraintsB) しかし... いつそれをするべきかわからない。で一度はできるはずですが、うまくviewDidLoadいきません。私は呼び出ししようとしたview.updateConstraints()とview.layoutSubviews()制約を設定した後、しかし無駄に。 viewDidLayoutSubviewsすべてに制約を設定すると、期待どおりに機能することがわかりました。2つのことを知りたいと思います... なぜこの動作になるのですか? viewDidLoadから制約をアクティブ化/非アクティブ化することは可能ですか?


3
Interface Builderの「幅は高さに等しい」制約
「正方形」制約を作成する方法が見つかりません。つまり、Interface Builderで「幅が高さと等しい」ということです。そのような制約をプログラムで追加することは可能だと思います。IBでできることはありますか?多分私はそれを見ないだけですか?それはささいなことのようですが、それを見つけることができません。

7
iOSでプログラムでアスペクト比の制約を設定するにはどうすればよいですか?
ビューコントローラに自動レイアウトを使用しました。VとHの位置を制約で設定しましたが、ボタンのサイズが5s、6、6 Plusに変わったときに、どうすればボタンのサイズを大きくできるか知りたいです。これは、ログインボタンに制約を追加した方法です。 NSArray *btncon_V=[NSLayoutConstraint constraintsWithVisualFormat:@"V:[btnLogin(40)]" options:0 metrics:nil views:viewsDictionary]; [btnLogin addConstraints:btncon_V]; NSArray *btncon_POS_H=[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-100-[btnLogin]-100-|" options:0 metrics:nil views:viewsDictionary]; [self.view addConstraints:btncon_POS_H]; NSArray *btncon_POS_V=[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-70-[Title]-130-[lblFirst]-0-[lblSecond]-20-[textusername]-10-[txtpassword]-10-[btnLogin]" options:0 metrics:nil views:viewsDictionary]; [self.view addConstraints:btncon_POS_V]; しかし、私の問題は、左右のギャップを管理しながら、高さが固定されているため、iPhone6および6Plusでは伸びてしまうことです。画面サイズに応じてサイズを大きくするにはどうすればよいですか?これはアスペクト比かもしれないと思いますが、コードでアスペクト比の制約を設定するにはどうすればよいですか?

7
プログラムでCenterX / CenterY制約を追加する
表示するものがない場合、セクションを表示しないUITableViewControllerがあります。このコードで表示するものがないことをユーザーに示すラベルを追加しました。 label = UILabel(frame: CGRectMake(20, 20, 250, 100)) label.text = "Nothing to show" self.tableView.addSubview(label) しかし今、私はそれを水平方向と垂直方向の中央に配置したいと思います。通常、スクリーンショットで強調表示されている2つのオプション(および高さと幅のオプション)を選択します。 次のコードを試して制約を追加しようとしましたが、アプリがエラーでクラッシュします。 label = UILabel(frame: CGRectMake(20, 20, 250, 100)) label.text = "Nothing to show" let xConstraint = NSLayoutConstraint(item: label, attribute: .CenterX, relatedBy: .Equal, toItem: self.tableView, attribute: .CenterX, multiplier: 1, constant: 0) let yConstraint = NSLayoutConstraint(item: label, …

11
幅と高さは、プログラムで自動レイアウトを使用したsuperViewと同じですか?
ネットでたくさんのスニペットを探していましたが、まだ問題の答えが見つかりません。私の質問は、scrollView(SV)があり、scrollView(SV)内に、スクロールビュー(SV)であるスーパービューと同じ幅と高さのボタンをプログラムで追加して、ユーザーが回転したときにデバイスボタンが同じフレームになるようにしたいということです。 scrollView(SV)の。NSLayout / NSLayoutConstraintを行う方法は?ありがとう

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.