尝试以编程方式从一个 XIB 文件创建多个视图

Posted

技术标签:

【中文标题】尝试以编程方式从一个 XIB 文件创建多个视图【英文标题】:Trying to create multiple views from one XIB file programmatically 【发布时间】:2014-05-19 18:37:54 【问题描述】:

我有一个启用页面的滚动视图,我想用UIViews 填充它。我曾尝试创建一个“XIB”文件并在 for 循环中从中加载,但这只会在我的滚动视图中给我一个 UIView

    int amount = garments.count;
[self.pageControl setNumberOfPages:amount];

for (int i = 0; i < amount; i++) 
    DOVGarment *garment = garments[i];

    CGRect frame;
    frame.origin.x = self.scrollView.frame.size.width * i;
    frame.size = self.scrollView.frame.size;

    DOVGarmentDetailView *view = [DOVGarmentDetailView new];

    NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"detailView" owner:view options:nil];

    view = [topLevelObjects objectAtIndex:0];

    view.image.image = [UIImage imageNamed:garment.fileName];
    view.labelID.text = garment.ID;

    [self.scrollView addSubview:view];


self.scrollView.contentSize = CGSizeMake(self.scrollView.frame.size.width * amount, self.scrollView.frame.size.height);

有人知道为什么这不起作用吗?或者如果这是可能的?

【问题讨论】:

您正在创建多个视图,但您没有更改框架,因此它们都将直接放置在彼此之上。 哇,非常感谢。这解决了它。 【参考方案1】:

您正在创建多个视图,但您没有更改框架,因此它们都将直接放置在彼此之上。

更新您的代码以使每个视图相对于之前创建的视图偏移

【讨论】:

【参考方案2】:

您放置在 xib 文件中的每个视图对象都只有一个实例。因此,您的 for 循环的每个运行周期都在访问同一个 UIView 实例。 如果您需要用视图填充滚动视图,则需要在 for 循环的每个运行周期中重新分配和初始化,从而创建许多 UIView 实例。

我就是这样做的,将 UIViews 水平放置在我的 scrollView 中 -

for (int i = 0; i<numberOfViews; i++)

            

                UIView*smallView = [[UIView alloc]initWithFrame:CGRectMake((i*scrollview.frame.size.width+heightOfYourView), 0, scrollview.frame.size.width, scrollview.bounds.size.height)];
[scrollview addSubview: smallView];

             
scrollview.contentSize = CGSizeMake(numberOfViews*scrollview.frame.size.width,    scrollview.frame.size.height);

【讨论】:

感谢您的回答。我知道这个解决方案,但是我正在寻找一种方法来生成多个视图,我可以在 XIB 中进行类似的样式设置。你有什么见解吗?

以上是关于尝试以编程方式从一个 XIB 文件创建多个视图的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式创建的 UIViewController 加载界面构建器 view.xib 文件

iOS:从 UIView 创建 XIB

UIToolbar xib xcode

从 xib 加载 UITableViewCell 会导致加载 nib 但未设置视图出口

以编程方式将一堆自定义视图从 XIB 添加到 UIStackView

在 xib 中以编程方式自定义 UIView