我的视图控制器中有很多组件,我想将它们组合在一个对象中以将它们一起滚动,这样做的过程是什么(如 android 中的线性布局)但我在 IOS 中需要它。
8 回答
iOS9引入了类似LinearLayout的东西:UiStackView
观看来自 WWDC 2015 的视频:https ://developer.apple.com/videos/wwdc/2015/?id=218
Apple 不提供线性容器,但您可以在 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];
布局管理器
首先,您正在寻找的是用于布局的声明性 API。我猜很多来自其他语言/平台的人都错过了这一点。iOS 只是有一些其他方法,例如布局约束或自动调整大小。但是,这并不适合所有用例。
布局库
我建议查看CocoaPods中存在的一些库。它易于安装和启动。我想提一下很简单的 CSLinearLayoutView。即使我是一个较小的项目MKLayoutLibrary的维护者,它也可以通过CocoaPods获得。那是一种更具压缩性的设计,它还提供了线性、堆栈和简单的流程布局。
清洁溶液
但是,如果您真的想深入了解布局主题,我建议您使用 UICollectionView 及其布局自定义可能性。
考虑到声明式解决方案不适用于大量项目或无休止的滚动布局。如果您想这样做,请进一步查看UICollectionView 自定义布局。
Android 中的线性布局 = iOS 中的堆栈视图
安卓:
orientation: Horizontal, Vertical
IOS:
Horizontal Stack View, Vertical Stack View in iOS
更多的:
Recycler View in Android = Table View in iOS
我刚刚编写了一个名为 AutoLinearLayoutView 的小部件,可以从 Github 签出。
它完全基于自动布局并支持iOS 7+。根据您的要求,示例项目完美地演示了线性布局视图包裹的十几个小部件,并将线性布局视图放置在 UIScrollView 中。
您可能需要在 iOS 上做更多的手动操作。您可以将所有视图添加到UIScrollView
,但是您必须contentSize
适当地设置 UIScrollView 。本质上,对于 N 个项目,滚动视图宽度将是:
scrollView.contentSize = CGSizeMake(N * itemWidth + (N - 1) * itemPadding, itemHeight);
然后,您需要设置每个框架以UIView
使其 x 坐标合适,并将其添加到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
.
ios中的每个组件都是uiview。所以你可以把每个组件都放到 UIView 中,比如
[containerView addSubView:YourComponent1];
[containerView addSubView:YourComponent2];
[containerView addSubView:YourComponent3];
然后您可以将其添加到您的UIScrollView