9

我的视图控制器中有很多组件,我想将它们组合在一个对象中以将它们一起滚动,这样做的过程是什么(如 android 中的线性布局)但我在 IOS 中需要它。

4

8 回答 8

10

iOS9引入了类似LinearLayout的东西:UiStackView

观看来自 WWDC 2015 的视频:https ://developer.apple.com/videos/wwdc/2015/?id=218

于 2015-06-12T16:49:27.877 回答
1

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];
于 2013-10-01T02:00:55.063 回答
1

布局管理器

首先,您正在寻找的是用于布局的声明性 API。我猜很多来自其他语言/平台的人都错过了这一点。iOS 只是有一些其他方法,例如布局约束或自动调整大小。但是,这并不适合所有用例。

布局库

我建议查看CocoaPods中存在的一些库。它易于安装和启动。我想提一下很简单的 CSLinearLayoutView。即使我是一个较小的项目MKLayoutLibrary的维护者,它也可以通过CocoaPods获得。那是一种更具压缩性的设计,它还提供了线性、堆栈和简单的流程布局。

清洁溶液

但是,如果您真的想深入了解布局主题,我建议您使用 UICollectionView 及其布局自定义可能性。

考虑到声明式解决方案不适用于大量项目或无休止的滚动布局。如果您想这样做,请进一步查看UICollectionView 自定义布局

于 2014-06-05T19:29:50.273 回答
1

Android 中的线性布局 = iOS 中的堆栈视图

安卓:

orientation: Horizontal, Vertical

IOS:

Horizontal Stack View, Vertical Stack View in iOS

更多的:

Recycler View in Android = Table View in iOS
于 2019-12-02T07:36:37.997 回答
1

我刚刚编写了一个名为 AutoLinearLayoutView 的小部件,可以从 Github 签出

它完全基于自动布局并支持iOS 7+。根据您的要求,示例项目完美地演示了线性布局视图包裹的十几个小部件,并将线性布局视图放置在 UIScrollView 中。

于 2016-04-27T15:16:29.417 回答
0

您可能需要在 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.

于 2013-05-13T15:01:35.687 回答
0

iOS 中没有这样的布局。您在视图上添加的每个组件都将根据其框架显示(而不是以顺序方式)。

为了做这些事情,你可以使用UIScrollView

查看本教程如何使用 UIScrollView

于 2013-05-13T12:46:56.500 回答
-2

ios中的每个组件都是uiview。所以你可以把每个组件都放到 UIView 中,比如

[containerView addSubView:YourComponent1];
[containerView addSubView:YourComponent2];
[containerView addSubView:YourComponent3];

然后您可以将其添加到您的UIScrollView

于 2013-05-13T12:45:12.867 回答