如何使用 XIB 的子视图实现 UIScrollView

Posted

技术标签:

【中文标题】如何使用 XIB 的子视图实现 UIScrollView【英文标题】:How to implement UIScrollView with Subviews from XIB's 【发布时间】:2011-01-14 23:12:29 【问题描述】:

以网格格式将 UIView(来自 xib)添加到 UIScrollView 的最佳方法是什么?

我查看了 AQGridView,但不确定从哪里开始创建我需要的自定义视图。

【问题讨论】:

【参考方案1】:

我假设网格是指主屏幕跳板之类的东西,其中每个图标都是不同的视图。

我还假设您已在 IB 中实例化 UIView 并设置了所有适当的连接并在您的代码中有一个指针。

然后在你的拥有 UIScrollView 的控制器中,(这就是我会做的,以前做过的)循环遍历你的所有 UIViews(在你复制在 xib 中创建的模板之后;我再次假设在这里,因为您的问题没有很好地定义),使用一些简单的数学设置它们的框架,然后使用 addSubview 将它们添加到 UIScrollView。最后确保将 UIScrollView 的 contentSize 设置为适当的值。

这是一个例子:

-(void)displayNewView:(NewView *)newIcon 
    //create view object
    NewViewController *newVC = [[NewViewController alloc] init];

    //modify the new UIView so it shows the correct state
    newVC.networkHost = newIcon;

    //add view object to screen
    [self.scrollView addSubview:newVC.view];

    //release a retain on the object
    [newVC release];

    //reposition the view object
    newVC.view.frame = CGRectMake((self.viewsOnDisplay%3*104), (self.viewsOnDisplay/3*105+6), 106, 95);

    //resize the view if necessary
    self.scrollView.contentSize = CGSizeMake(320.0, (self.viewsOnDisplay/3*105+96+6));

在视图重新定位的那一行中,进行了总和数学运算,而不是向您显示一堆符号,我从我的一个应用程序中取了一行,我会告诉您每个数字的含义(它们都是不同,因此这是区分它们的便捷方法):

3: number of views per row
104: horizontal spacing between views

105: vertical spacing between views
6: space at the very top of the UIScrollView (a header if u will)

106: view width
95: view height

因为这是一个简单地将单个 UIView 添加到屏幕的方法,它访问本地合成属性self.viewsOnDisplay 以了解已经显示了多少视图,因此它知道将下一个视图放在哪里。如果您将其作为 for 循环或其他内容的一部分执行此操作,则这将只是 i (或称为计数器 var 的任何内容)。请记住,您的计数器应从 0 开始。

【讨论】:

以上是关于如何使用 XIB 的子视图实现 UIScrollView的主要内容,如果未能解决你的问题,请参考以下文章

将 xib 视图初始化为另一个 NSView 的子视图

来自 XIB 的自定义 UIView 加载具有巨大规模的子视图

如何在通过 UITableViewCell 中的 XIB 加载的子视图中对标签和 UILabels/UIImageViews 进行初始样式设置

Xcode XIB:如何实现 ScrollView 或 PageControl 来滑动子视图?

添加和布局从 xib 加载的子视图到自定义单元格

多次使用 UIView(使用 xib 创建)作为同一视图的子视图