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

自動レイアウトは、OS XおよびiOS用の制約ベースの説明的なユーザーインターフェイスレイアウトシステムです。

16
Xcode 8にアップデートした後のレイアウトの問題
Xcode 8にアップグレードした後の画面の前と後を次に示します。私が行ったのは、main.storyboardを開いて、そこから自分のアプリをビルドし、スマートフォンで実行しただけです。私のバージョン管理では、Xcodeがmain.storyboardを開いただけで多くの変更を行っていることがわかります。これらの変更を削除すると、Xcode 7.3.1で使用していたものを確認できます。しかし、ストーリーボードを使用してインターフェイスビルダーを再度開くとすぐに、これらの変更が元に戻るのがわかります。 ここで私にできることはありますか? Xcode 8より前 Xcode 8への更新後
102 ios  xcode  autolayout  xcode8  ios10 


4
Storyboardを使用してUIViewをマスクし、角を丸くしますか?
このような多くの質問は、プログラムでマスクを作成し、UIViewに角を丸める方法を説明しています。 ストーリーボード内でそれをすべて行う方法はありますか?Storyboardで角を丸く作成しているように見えるので、質問するだけで、プレゼンテーションとロジックの境界が明確になります。

29
AutoLayoutをUITableViewのtableHeaderViewで使用することは可能ですか?
AutoLayout私はどこでもそれを使用していることを発見したので、今はで使用しようとしていますtableHeaderView。 私subclassはUIView追加されたすべて(ラベルなど...)を作成しましたが、それらの制約を使用して、それを' に追加しCustomViewました。UITableViewtableHeaderView すべてがうまく以外の作品UITableViewは常にディスプレイ上のCustomViewことで、上記の私は意味CustomViewあるの下でUITableViewそれを見ることができないように! それは私が何をすべきかに関係なく、ということらしいheightのUITableView" tableHeaderViewある常に(その幅、xとyがある)0。 私の質問:フレームを手動で設定せずにこれを達成することはまったく可能ですか? 編集:CustomView「subview私が使用していることは、これらの制約があります。 _title = [[UILabel alloc]init]; _title.text = @"Title"; [self addSubview:_title]; [_title keep:[KeepTopInset rules:@[[KeepEqual must:5]]]]; // title has to stay at least 5 away from the supperview Top [_title keep:[KeepRightInset rules:@[[KeepMin must:5]]]]; [_title keep:[KeepLeftInset rules:@[[KeepMin must:5]]]]; [_title keep:[KeepBottomInset rules:@[[KeepMin must:5]]]]; 手作業でライブラリ「KeepLayout」を使用しています。これは、手動で制約を作成すると時間がかかり、1つの制約に対して行が多すぎるためですが、メソッドは自明です。 そして、UITableViewこれらの制約があります: _tableView = …

14
UIStackView「押しつぶされた」非表示ビューの「制約を同時に満たすことができない」
UIStackViewの「行」が押しつぶされると、AutoLayout警告がスローされます。ただし、これらは正常に表示され、以下の種類のロギング以外に問題はありません。 制約を同時に満たすことができません。おそらく、次のリストの少なくとも1つの制約は、望ましくないものです。これを試してください:(1)各制約を見て、予期しないものを見つけ出してください。(2)不要な制約を追加したコードを見つけて修正します。(注:NSAutoresizingMaskLayoutConstraints理解できない場合は、UIViewプロパティのドキュメントを参照してくださいtranslatesAutoresizingMaskIntoConstraints)( したがって、これを修正する方法はまだわかりませんが、それだけで迷惑であることにほかならないようです。 誰かがそれを解決する方法を知っていますか?興味深いことに、レイアウト制約には「UISV-hiding」というタグが付けられていることがよくあります。これは、サブインスタンスまたはこのインスタンスの何かの高さの最小値を無視する必要があることを示していますか?

13
Xcode 8およびiOS10以降、viewDidLayoutSubviewsでビューのサイズが適切に設定されていません
Xcode 8では、でviewDidLoad、すべてのビューコントローラーサブビューのサイズが同じ1000x1000のようです。奇妙なことですが、大丈夫ですviewDidLoadが、ビューのサイズを正しく設定するのにこれほど優れた場所ではありません。 しかしviewDidLayoutSubviewsです! 私の現在のプロジェクトでは、ボタンのサイズを印刷しようとしています。 - (void)viewDidLayoutSubviews { [super viewDidLayoutSubviews]; NSLog(@"%@", self.myButton); } ログには、myButtonのサイズ(1000x1000)が表示されます!次に、たとえばボタンをクリックしてログオンすると、ログは通常のサイズを示します。 自動レイアウトを使用しています。 バグですか?
94 ios  autolayout  ios10  xcode8 

5
iOS Autolayout:同じ幅の2つのボタンを並べて
現在、オートレイアウトに問題があります。次の図に示すように、インターフェイスビルダーを使用して、同じ幅の2つのボタンを並べて配置しようとしています。 次のプレビュー画像から、titleImageは適切に制約され、正しく表示されていますが、ボタンはそうではありません。私は、button1をtitleImageのリーディングエッジに揃え、button2をtitleImageのトレーリングエッジに揃えて実験しましたが、2つのボタン間の幅の分布は、この時点で歪んでいます。 私の目的は、不足している制約を理解することであり、デバイスに関係なく同じ幅を維持するために2つのボタンに適用する必要があります。可能であれば、追加のコードではなく、インターフェイスビルダーを通じてこれを実現したいと思います。
92 ios  iphone  xcode  autolayout 

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

16
UIViewに影響を与えるすべての制約を削除します
いくつかの制約を介して画面に配置されるUIViewがあります。一部の制約はスーパービューによって所有され、その他の制約は他の祖先によって所有されます(たとえば、UIViewControllerのviewプロパティ)。 これらの古い制約をすべて削除し、新しい制約を使用して新しい場所に配置したいと思います。 すべての制約に対してIBOutletを作成せず、どのビューがその制約を所有しているかを覚えておく必要なしに、これを行うにはどうすればよいですか? 詳述すると、単純なアプローチは、制約ごとにIBOutletsの束を作成し、次のようなコードを呼び出すことです。 [viewA removeConstraint:self.myViewsLeftConstraint]; [viewB removeConstraint:self.myViewsTopConstraint]; [viewB removeConstraint:self.myViewsBottomConstraint]; [self.view removeConstraint:self.myViewsRightConstraint]; このコードの問題は、最も単純な場合でも、2つのIBOutletを作成する必要があることです。複雑なレイアウトの場合、これは4つまたは8つの必要なIBOutletsに簡単に到達する可能性があります。さらに、制約を削除するための呼び出しが適切なビューで呼び出されていることを確認する必要があります。たとえば、myViewsLeftConstraintがによって所有されていると想像してくださいviewA。誤って電話をかけても[self.view removeConstraint:self.myViewsLeftConstraint]、何も起こりません。 注:メソッドconstraintsAffectingLayoutForAxisは有望に見えますが、デバッグのみを目的としています。 アップデート:私は契約を受けています回答の多くはself.constraints、self.superview.constraintsこれらの、またはいくつかの変種。これらのメソッドは、ビューに影響を与える制約ではなく、ビューが所有する制約のみを返すため、これらのソリューションは機能しません。 これらのソリューションの問題を明確にするために、次のビュー階層を検討してください。 祖父 お父さん 私 息子 娘 兄 おじさん ここで、次の制約を作成し、それらを常に最も近い共通の祖先にアタッチするとします。 C0:私:息子と同じトップ(私が所有) C1:私:幅= 100(私が所有) C2:私:ブラザーと同じ高さ(父が所有) C3:私:おじさんと同じトップ(祖父が所有) C4:私:祖父と同じ左(祖父が所有) C5:兄弟:父と同じ左(父が所有) C6:おじさん:おじいさんと同じ左(おじいさんが所有) C7:息子:娘と同じ左(私が所有) ここで、に影響を与えるすべての制約を削除したいとしますMe。適切な解決策は削除する必要が[C0,C1,C2,C3,C4]あり、他には何もありません。 self.constraints(selfがMeである場合)を使用[C0,C1,C7]すると、Meが所有する唯一の制約であるため、が取得されます。明らかに、これが欠落しているため、これを削除するだけでは十分ではありません[C2,C3,C4]。さらに、C7不必要に取り外しています。 私がself.superview.constraints(自己が私である場合)を使用する場合[C2,C5]、それらは父が所有する制約であるため、私は取得します。とC5はまったく関係がないため、明らかにこれらすべてを削除することはできませんMe。 を使用するとgrandfather.constraints、取得し[C3,C4,C6]ます。繰り返しますが、そのC6ままにしておく必要があるため、これらすべてを削除することはできません。 強引なアプローチは、ビューの祖先(それ自体を含む)のそれぞれをループし、ビュー自体であるかどうfirstItemかsecondItemを確認することです。その場合は、その制約を削除します。これにより、正しい解が返され[C0,C1,C2,C3,C4]、が返され、それらの制約のみが返されます。 ただし、祖先のリスト全体をループするよりも、より洗練されたソリューションがあることを望んでいます。

8
実行時に制約の優先度を変更するにはどうすればよいですか
動的な高さのビューがあり、実行時にこのビューの高さの優先度を変更しようとしています。 これが私のコードの一部です。 if (index == 0) { surveyViewHeightConstraint.constant = 0; surveyViewHeightConstraint.priority = 1000; } else if (index == 1) { surveyViewHeightConstraint.constant = 163; surveyViewHeightConstraint.priority = 500; } ボタン操作でインデックスを変更しています。このコードを実行すると、次のエラーが発生します。 *** Assertion failure in -[NSLayoutConstraint setPriority:], /SourceCache/Foundation/Foundation-1141.1/Layout.subproj/NSLayoutConstraint.m:174 ここでの私の間違いは何ですか?

12
自動レイアウトを使用してtableHeaderView(UITableView)の高さを設定するにはどうすればよいですか?
過去3、4時間、これで頭を壁にぶつけてきましたが、理解できないようです。フルスクリーンのUITableViewを内部に持つUIViewControllerがあり(画面上に他のものがあるため、UITableViewControllerを使用できません)、tableHeaderViewのサイズを自動レイアウトで変更したいと考えています。言うまでもなく、それは協力的ではありません。 以下のスクリーンショットを参照してください。 OverviewLabel(「ここに概要情報を一覧表示する」テキストなど)には動的コンテンツがあるため、自動レイアウトを使用してサイズを変更し、スーパービューにします。階層内の視差テーブルビューのすぐ下にあるtableHeaderViewを除いて、すべてのサイズを適切に変更できます。 そのヘッダービューのサイズを変更する唯一の方法は、次のコードを使用してプログラムで行うことです。 CGRect headerFrame = self.headerView.frame; headerFrame.size.height = headerFrameHeight; self.headerView.frame = headerFrame; [self.listTableView setTableHeaderView:self.headerView]; この場合、headerFrameHeightは、次のようにtableViewHeaderの高さを手動で計算します(innerHeaderViewは白い領域、つまり2番目の「ビュー」です。headerViewはtableHeaderViewです)。 CGFloat startingY = self.innerHeaderView.frame.origin.y + self.overviewLabel.frame.origin.y; CGRect overviewSize = [self.overviewLabel.text boundingRectWithSize:CGSizeMake(290.f, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName: self.overviewLabel.font} context:nil]; CGFloat overviewHeight = overviewSize.size.height; CGFloat overviewPadding = ([self.overviewLabel.text length] > 0) ? 10 : 0; // If …

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では伸びてしまうことです。画面サイズに応じてサイズを大きくするにはどうすればよいですか?これはアスペクト比かもしれないと思いますが、コードでアスペクト比の制約を設定するにはどうすればよいですか?

6
プログラムによるレイアウト制約の作成
多くの人がすでにこれについてたくさんの質問をしていることを私は知っています、しかし答えがあっても私はそれを機能させることができません。 ストーリーボードの制約を扱うときは簡単ですが、コードでは苦労します。たとえば、右側にとどまり、画面の向きに応じた画面の高さを持つビューを作成しようとしています。これは私のコードです: UIView *myView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 200, 748)]; myView.backgroundColor = [UIColor redColor]; [self.view addSubview:myView]; [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-[myView(>=748)]-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(myView)]]; いくつかの制約を満たしていません。何が悪いのかわかりません。また、のようなself.myViewローカル変数の代わりにのようなプロパティを使用できないのはなぜmyViewですか?

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, …

4
自動レイアウトを使用してサブビューが動的に変更された後、スーパービューのサイズを変更する
私は神の愛のためにこのサイズ変更のスーパービューのこつを傾けることができません。 私はUIView *superview 4で持っていUILabelsます。2は他の2つのヘッダーとして機能します。 4つすべてのコンテンツは、データベースから動的に取得されます。 SizeToFitvs SizeThatFits:(CGSize)vs UIView systemLayoutSizeFittingSize:、UILayoutFittingCompressedSizeまたはのいずれかを渡しますUILayoutFittingExpandedSize。 プログラムで自動レイアウトを使用し、スーパービューの高さをダミーの数値以上に設定しました。 どこで、どのように私はこれらを使用しないSizeToFit対sizeThatFits:(CGSize)対UIView systemLayoutSizeFittingSize:のいずれか渡し、UILayoutFittingCompressedSizeまたはUILayoutFittingExpandedSize。私はここでスタックで多くのヒントを読みましたが、結局何もありませんでした。 特定の場所でスーパービューの制約を再計算する必要がありますか?Mabyは、コントローラークラスで高さを「@property」に設定し、それを削除して読み取りましたか?Atm私はすべてをどこにでも置いてからいくつかを入れようとしました。それでも、ダミーの高さとテキストが外側に浮いている状態で、同じサイズの最終結果が得られます。サブビューでclipsToBoundを設定した後でも。 私は私の髪を引っ掻いています..助けて

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