私のビューコントローラには多くのコンポーネントがありますが、それらを1つのオブジェクトにまとめてスクロールするための手順は何ですか(アンドロイドの線形レイアウトなど)。私はIOSでそれが必要です。iosの線形レイアウトと似ているもの
答えて
すべてのコンポーネントはiosでの表示となります。あなたは、あなたがiOS版で利用できるようなレイアウトはありません、あなたのUIScrollView
にこれを追加することができます
[containerView addSubView:YourComponent1];
[containerView addSubView:YourComponent2];
[containerView addSubView:YourComponent3];
ようにUIViewのにすべてのコンポーネントを置くことができます。ビューに追加する各コンポーネントは、そのフレームに基づいて表示されます(逐次的な方法ではありません)。
UIScrollViewです。このチュートリアルHow to use UIScrollView
あなたはおそらくiOSのと、もう少しマニュアルに何かを行う必要があるでしょう
チェック。すべてのビューをUIScrollView
に追加することはできますが、UIScrollViewのcontentSize
を適切に設定する必要があります。基本的に、N個のアイテムについて、スクロールビューの幅は次のようになります。
scrollView.contentSize = CGSizeMake(N * itemWidth + (N - 1) * itemPadding, itemHeight);
その後、あなたはそのx座標が適切であるので、各UIView
のフレームを設定する必要があり、かつUIScrollView
に追加します:
for (int i = 0; i < views.count; i++) {
UIView *view = [views objectAtIndex:i];
view.frame = CGRectMake(i * itemWidth + i * itemPadding,
view.frame.origin.y,
view.frame.size.width,
view.frame.size.height);
[scrollView addSubview:view];
}
単純な線形レイアウトよりも複雑なものをお望みなら、UICollectionView
をご覧ください。
アップル
使用例を線形コンテナ を提供していますがgithubのでXHFLinearViewを使用することができません。
XHFLinearView *linearView=[[XHFLinearView alloc]initWithFrame:self.view.bounds];
[self.view addSubview:linearView];
//init linear view content views
[linearView.itemSource addObject:XHFLinearViewUnitMake(someView, XHFMarginMake(0, 0, 0, 0))];
//force layout linear view
[linearView needLayout];
//insert a view with animation
[linearView insertItem:someView margin:XHFMarginMake(0, 0, 0, 0) atIndex:0 withAnimation:XHFLinearItemAnimationFade];
//replace a view with animation
[linearView replaceItem:someView withNewItem:newView withAnimation:XHFLinearItemAnimationFade];
//resize a view with animation
someView.frame=xxx;
[linearView needLayoutForItem:someView];
//remove a view with animation
[linearView removeItemByIndex:0 withAnimation:XHFLinearItemAnimationFade];
LayoutManagerのすべての
まず、あなたが探していることですレイアウト用の宣言型API私は他の言語/プラットフォームから来ている多くの人々がそれを逃していると思います。 iOSには、レイアウトの制約や自動サイズ設定などの方法があります。しかし、これはすべてのユースケースに適合するわけではありません。
レイアウトライブラリ
私はCocoaPodsに存在するいくつかのライブラリに見てみることをお勧めします。簡単にインストールして起動できます。 私はCSLinearLayoutViewについて言及したいと思いますが、これはとても簡単です。私はさらに小さいプロジェクトMKLayoutLibraryのメンテナーで、CocoaPodsでも利用できます。これは線形、スタック型、単純なフローレイアウトを提供するより圧縮性の高いものです。
クリーンソリューションしかし
、あなたは本当に私がUICollectionViewとそのレイアウトのカスタマイズの可能性で遊んでお勧めレイアウトの話題に非常に深く行きたい場合。
膨大な量のアイテムや無限のスクロールレイアウトでは、宣言的な解決策が機能しないと考えてください。そうしたい場合は、UICollectionView custom layoutsをさらに調べてください。
iOS9はのLinearLayoutに似たものを導入しました:UiStackView
がWWDC 2015からこのビデオを参照してください:https://developer.apple.com/videos/wwdc/2015/?id=218
最後に... :)しかし、Androidとは異なり、Appleの新しいUI要素は下位互換性がありません。つまり、UIStackViewはiOS 9 +でのみ利用可能です。... –
UiStackViewは貧しい人のLinearLayoutであり、正直に言えば、太さや余白などを設定できません。 – fhucho
私はちょうどchecked out from GithubすることができAutoLinearLayoutViewと呼ばれるウィジェットを書きました。
これは完全に自動レイアウトとサポートに基づいていますiOS 7+。要件に応じて、この例のプロジェクトでは、十数種のウィジェットが線形レイアウトビューでラップされ、線形レイアウトビューはUIScrollViewに配置されています。
でも、このコンポーネントの1つは、その高さが動的でUIScrollViewよりも大きいテキストビューです。この場合、私は何をしますか? – CarinaM
UIScrollViewのコンテンツサイズは、水平方向と垂直方向の両方で動的に拡張できます。 textViewもscrollviewのサブクラスです。あなたはいくつかのチュートリアルのリンクを持っているいくつかのscrollviewのチュートリアルを見てください –
?はい、必要なのは、コンテンツサイズを動的に拡張することです。 – CarinaM