在Xcode中使用自动布局开发应用程序的最佳方法是什么?

时间:2015-04-01 19:57:29

标签: xcode swift autolayout

所以我想这将因为过于主观和太基于意见而被关闭,但如果有人能帮助我,我会很感激。

我有一个问题。如果我有几个控制器都具有几乎相同的东西例如它们具有相同的背景,有一个菜单绕过边缘但实际内容是不同的。我有几个想法。 1)如果用户在菜单上选择了不同的选项并为该菜单生成新对象,只需拥有一个视图控制器并暂停该当前视图的对象。我用这种方式的问题是我找不到一种方法来使用自动布局。

第二种方法是在我可以调用的.swift文件中有一个函数,它会创建一个图像视图,并设置菜单中的所有内容。我有相反的问题,现在自动布局不起作用。

应用程序开发者必须有办法做到这一点,我可能只是错误地想到了这一点。

有没有更好的方法来做到这一点 - 我相信有吗?如果有人能指出我正确的方向,我将不胜感激。

由于

编辑:

我应该清楚说明我使用的语言很快。

1 个答案:

答案 0 :(得分:1)

您可以创建自定义container view controller并根据用户选择交换视图控制器以更改部件。

- 添加示例 -

例如iPad的设置应用。左侧是表格视图,右侧是详细视图,其更改用户选择。所以Tableview可以包含在一个视图控制器中,比如说ListViewController。这不会改变。右侧是DetailViewController,它将根据用户选择进行交换。您的ContainerViewController将始终具有2个视图控制器。

以下是如何将视图控制器添加为子视图并将其视图设置为objective-c。

 - (void) setupContentViewControllerWith: (DetailViewController*) detailViewController andListViewController:(ListViewController*)listViewController {
    [self addChildViewController:listViewController];
    [self addChildViewController:detailViewController];
    listViewController.view.frame = CGRectMake(kListView_X, kListView_Y, kListView_Width, kListView_Height);
    detailViewController.view.frame = CGRectMake(kListView_Width, kDetailView_Y, self.view.bounds.size.width, self.view.bounds.size.height-kDetailView_Y);
    [self.scrollContainer addSubview:listViewController.view];
    [self.scrollContainer addSubview:detailViewController.view];
    [self.scrollContainer setContentSize:CGSizeMake(kListView_Width+self.view.bounds.size.width, self.view.bounds.size.height)];
}

当用户从列表中选择新项目时,您可以交换DetailViewControllers,如下所示

 - (void) replaceEpisodeControllerWith:(DetailViewController *)detailViewController {
detailViewController.view.frame = CGRectMake(kListView_Width, kDetailView_Y,  self.view.bounds.size.width, self.view.bounds.size.height-kDetailView_Y);
[UIView transitionFromView:currentDetailViewController.view
                    toView:detailViewController.view
                  duration:0.0
                   options:UIViewAnimationOptionTransitionNone
                completion:^(BOOL finished)
 {
     [currentDetailViewController.view removeFromSuperview];
     [currentDetailViewController removeFromParentViewController];
     [currentDetailViewController release];
     currentDetailViewController = detailViewController;
 }];
}

我没有这个版本的快速版本。