【问题标题】:What is the best way to develop applications using the auto layout in Xcode?在 Xcode 中使用自动布局开发应用程序的最佳方式是什么?
【发布时间】:2015-04-01 19:57:28
【问题描述】:

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

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

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

应用程序开发人员必须有办法做到这一点,我只是可能认为这是完全错误的方式。

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

谢谢

编辑:

我应该说清楚我使用的语言是swift。

【问题讨论】:

  • 为您的视图控制器创建一个自定义类并让您的第二个视图控制器继承自第一个?
  • @milo526 好的,这是否意味着我可以使用拖放部分,例如添加所有菜单/徽标/背景,然后将其应用于其余部分,或者我可以编写代码使它们出现?谢谢

标签: xcode swift autolayout


【解决方案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;
 }];
}

我没有这个的 swift 版本。

【讨论】:

  • 那么当我有多个视图控制器或者当我有一个视图控制器并且我正在更改其中的内容时,我会使用它吗? :)
  • 另外,我使用的语言是swift。
  • 您一次将有 2 个视图控制器。一个是常见的东西(比如你提到的菜单)。第二个视图控制器会根据用户的选择而改变。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-03
  • 1970-01-01
  • 2012-03-06
  • 2011-08-19
相关资源
最近更新 更多