高さ1000pxのコンテンツを含むスクロールビューがあり、ストーリーボードで簡単にデザインできるようにレイアウトできるようにしたいと考えています。
プログラムで実行できることはわかっていますが、視覚的に確認できるようにしたいのです。スクロールビューをビューコントローラーに配置するたびにスクロールしません。希望どおりに機能させることは可能ですか、それともコードで行う必要がありますか?
高さ1000pxのコンテンツを含むスクロールビューがあり、ストーリーボードで簡単にデザインできるようにレイアウトできるようにしたいと考えています。
プログラムで実行できることはわかっていますが、視覚的に確認できるようにしたいのです。スクロールビューをビューコントローラーに配置するたびにスクロールしません。希望どおりに機能させることは可能ですか、それともコードで行う必要がありますか?
回答:
ソリューションを見つけるのに2時間を費やしたばかりで、StackOverflowがこのQAスタイルを許可しているため、私は自分の質問に答えています。
ここから始めて、ストーリーボードで機能させる方法です。
1:コントローラを表示してをクリックしAttribute Inspector
ます。
2:サイズをFreeform
推論ではなくに変更します。
3:そのストーリーボードのメインビューに移動します。スクロールビューではなく、トップレベルビューに移動します。
4:Size Inspector
このビューをクリックして、目的のサイズに設定します。私は身長を1000に変更しました。
これで、ストーリーボードにビュー設定があり、スクロールの高さ全体を確認して簡単にデザインできることがわかります。
5:スクロールビューにドロップしてストレッチし、ビュー全体を占めるようにします。これで、320,1000のサイズのスクロールビューがビューコントローラのビューに配置されます。
次に、スクロールして、コンテンツを正しく表示する必要があります。
6:スクロールビューをクリックして、をクリックしIdentity Inspector
ます。
7:タイプがSIZEのUser Defined runtime attribute
KeyPath を含むa を追加contentSize
し、コンテンツサイズを入力します。私にとっては(320、1000)です。
ストーリーボードでスクロールビュー全体を見たいので、それを拡大し、フレームは320,1000ですが、これをアプリで機能させるには、フレームを表示されるスクロールビューになるように変更する必要があります。
8:追加runtime attribute
キーパスとをframe
タイプRECTと0,0,320,416で。
これで、アプリを実行すると、0、0、320、416のフレームを持つスクロールビューが表示され、1000までスクロールできます。ストーリーボードでは、サブビューと画像をレイアウトすることができます。次に、実行時属性が適切に表示されるようにします。これらすべてを1行のコードなしで行います。
frame
属性を定義する必要はありません。実際、すべてのデバイスが正確に同じサイズではありません(iPhone 5)。
Auto Layout
XCode 8.2.1で機能した手順を以下に示します。
Size Inspector
しView Controller
、ではなく高さ1000に変更Simulated Size
します。Freeform
Fixed
View Controller
をRootViewに変更します。Scroll View
サブビューとしてをドラッグし、名前をScrollViewに変更します。Vertical Stack View
サブビューとしてをドラッグし、名前をContentViewに変更します。Attributes Inspector
、の代わりにに変更します。Distribution
Fill Equally
Fill
View
サブビューとしてをドラッグし、名前をRedViewに変更します。Red
の背景として設定します。View
サブビューとしてをドラッグし、名前をBlueViewに変更します。Blue
の背景として設定します。Update Frames
ボタンをクリックします。
階層を表示:
コントローラシーンの表示(高さ:1000):
iPhone7で実行(高さ:1334/2):
BlueView
にRedView
「上」を「下」に設定する場合の注意(Xcode 8.2):1)BlueView
下を ドラッグしますRedView
(つまり、オーバーラップしないようにしてください。手順4は機能しません)。2)下部のピンメニューを開きます。3)上部マージン制約の右側にある小さな矢印をクリックします。4)を選択しRedView
、そのメニューから。これはあなたがのようなもの行うことができ、以前のXcodeのバージョンと異なる値を0に設定Editor
- > Pin
- > ...
UIStackView
制約設定の問題を回避するために使用します。
iOS 7およびXCode 5で私のために働いた手順は次のとおりです。
ViewControllerをドラッグします(UIView "View"に付属しています)。
1.1「View Controller」を選択し、「File Inspector」を選択して、「Auto layout」のチェックを外します。
keyPathに「contentSize」と入力します。タイプは「サイズ」を選択してください。そして、値として{320、1000}を入力します。
注:ステップ4は、スクローラーにサイズが320x1000単位のコンテンツが含まれていることを示しています。したがって、contentSizeを設定すると、スクローラーが機能します。
[ビューコントローラー]を選択し、[属性インスペクター]を選択して、[ サイズからフリーフォーム]を選択します。
注:手順5では、View Controllerに付属する「View」のサイズを変更できます。
「表示」を選択し、次に「サイズ検査」を選択します。
注:5、6&7は、私たちがして、純粋ためである参照伸びやストーリーボードの内部全体に拡大図。注:View Controllerで[Auto Layout]をオフにしてください。
ビューの階層は次のようになります。
何時間もの試行錯誤の末、コンテンツを「オフスクリーン」のスクロールビューに入れる非常に簡単な方法を見つけました。XCode 5とiOS 7でテスト済み。2つの小さなトリック/回避策を使用して、ほぼすべてStoryboardでこれを実行できます。
これまでのところ、ストーリーボードの作業では、viewControllerの「viewDidLoad」メソッドに1行のコードを追加して、scrollViewsのコンテンツを設定し、「囲んでいるビュー」全体を含める必要があります。ストーリーボードでこれを行う方法が見つかりませんでした:
- (void)viewDidLoad
{
[super viewDidLoad];
self.scrollView.contentSize = CGSizeMake(320, 800);
}
これcontentSize
を行うsize
には、keyPathをIdentity InspectorのscrollViewにとして追加し、(320、1000)に設定します。
私はAppleがこれをストーリーボードでより簡単にする必要があると思います.TableViewControllerでは、ストーリーボードで画面外にスクロールするだけです(20セルを追加すると、簡単にスクロールできることがわかります)。これは、ScrollViewControllerでも可能です。
iOS7でスクロールを機能させ、iOS 7およびXCode 5で自動レイアウトを機能させる。
これに加えて:https : //stackoverflow.com/a/22489795/1553014
どうやら、私たちがする必要があるすべては:
すべての制約をスクロールビューに設定します(つまり、最初にスクロールビューを修正します)。
次に、distance-from-scrollView制約を一番下のアイテム(スクロールビュー(スーパービュー))に設定します。
注:ステップ2は、ストーリーの最後のコンテンツがスクロールビュー内のどこにあるかを伝えます。
この例では、Interface BuilderのAutolayout機能をオフにしました。そして、私はまだ(まったく理由もなく)比較的古い4.6.1バージョンのXcodeを使用しています。
スクロールビューが表示されているビューコントローラー(メインビュー)から始めます。
1:オブジェクトライブラリからコンテナビューをスクロールビューに追加します。新しいビューコントローラーがストーリーボードに追加され、スクロールビューでビューコントローラーにリンクされていることに注意してください。
2:コンテナビューを選択し、サイズインスペクタで、自動サイズ変更せずに上と左にアンカーするようにします。
3:高さを1000に変更します(この例では1000を使用しています。必要な値を適用する必要があります)。
4:新しいビューコントローラーを選択し、属性インスペクターからサイズをフリーフォームに変更します。
5:新しいビューコントローラーのビューを選択し、サイズインスペクターで高さを1000(コンテナービューの高さに等しい)に変更します。
6:後でテストするために、新しいビューコントローラーのビューで、ビューの上部と下部にラベルを追加します。
7:元のビューコントローラーからスクロールビューを選択します。IDインスペクターで、keyPathをcontentSizeに設定し、typeをSizeに設定し、値を{320、1000}(またはコンテナービューのサイズ)に設定した属性を追加します。
8:4インチのiPhoneシミュレータで実行します。上部のラベルから下部のラベルまでスクロールできるはずです。
9:3.5インチのiPhoneシミュレータで実行します。上部のラベルから下部のラベルまでスクロールできるはずです。
Xcode 4.6.1はiOS6以下でしかビルドできないことに注意してください。このアプローチを使用してiOS6用にビルドしても、iOS7でアプリを実行しても同じ結果を得ることができます。
内ではUITableView
、セルまたは要素を選択してトラックパッドで上下にスクロールすることで、実際にテーブルビューをスクロールできます。
についてはUIScrollView
、アレックスの提案が好きですが、ビューコントローラーを一時的にフリーフォームに変更し、ルートビューの高さを増やし、UIを構築し(手順1〜5)、完了したら標準の推定サイズに戻すことをお勧めします。ランタイム属性としてコンテンツサイズをハードコードする必要がないようにします。これを行うと、3.5インチと4インチの両方のデバイスをサポートしようとする多くのメンテナンスの問題と、将来的に画面解像度が増加する可能性が生まれます。
次のサンプルのように、viewDidAppearのcontentSizeプロパティのみを設定する必要があります。
- (void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
self.scrollView.contentSize=CGSizeMake(306,400.0);
}
自動レイアウトの問題を解決し、iOS7で正常に動作します。
免責事項:-iOS 9以降のみ(スタックビュー)。
iOS 9デバイスにアプリをデプロイする場合は、スタックビューを使用します。手順は次のとおりです。
spacing
、サブビュー(子)の間にスペースを置きます。2つのサブビューの間にさらにスペースが必要な場合は、「スペーサー」の子を追加します。これは、固定サイズの透明なUIViewです。
iOS7では、FreeFormサイズのViewControllerのUIScrollView内にViewがある場合、何をしてもアプリでスクロールしないことがわかりました。私は遊んでみましたが、FreeFormsを使用しない次のものが機能しているように見えました。
ViewControllerのメインビュー内にUIScrollViewを挿入します。
必要に応じて、ScrollViewのAutolayout制約を設定します。私にとっては、0から上へのレイアウトガイドと0から下へのレイアウトガイドを使用しました
ScrollView内に、コンテナビューを配置します。高さを好きなように設定します(例:1000)
コンテナに高さ制約(1000)を追加して、サイズ変更しないようにします。下部はフォームの最後を超えます。
次の行を追加します[self.scrollView setContentSize:CGSizeMake(320、1000)]; scrollView(IBOutletとして接続したもの)を含むViewControllerに
コンテナに関連付けられているViewController(自動的に追加される)は、Interface Builderで希望の高さ(1000)になり、元のView Controllerでも適切にスクロールします。これで、コンテナーのViewControllerを使用してコントロールをレイアウトできます。
私は5セントを受け入れられた答えにしたいと思います:2日間トピックを調査していて、最終的にこれからいつも使用するソリューションを見つけました
承認された回答の項目4に進み、フレームの属性の追加やコンテンツサイズなどを忘れます。
すべてを自動化するには、このリンクのソリューションを使用するだけです
すべてが明確で、簡単で、エレガントで、iOS 7の魅力のように機能します。
垂直スクロールビューの同じ解決策に到達するためのちょっとした不快な回答を次に示しますが、(stackoverflowの精神に反して)質問には回答しません。scrollViewを使用する代わりに、UITableViewを使用して、通常のUIViewをヘッダーにドラッグし、必要な大きさにするだけで、ストーリーボードのコンテンツをスクロールできます。
どうやらあなたはまったく高さを指定する必要はありません! これは、何らかの理由で変更された場合に便利です(コンポーネントのサイズを変更したり、フォントサイズを変更したりします)。
私はこのチュートリアルに従っただけで、すべてがうまくいきました:http : //natashatherobot.com/ios-autolayout-scrollview/
(注意:ビューを中央に配置する場合を除いて、viewDidLayoutSubviewsを実装する必要はないため、ステップのリストはさらに短くなります)。
お役に立てば幸いです。
キーはcontentSizeです。
UIScrollViewを追加する場合、これは多くの場合見当たらず、表示されません。
UIScrollViewを選択し、Identity Inspectorを選択します。
Identity InspectorのscrollViewにcontentSize
keyPathをとして追加し、(320、1000)にsize
設定します。
離れてスクロールします。