如何在一个 UIViewController 中处理多个视图

Posted

技术标签:

【中文标题】如何在一个 UIViewController 中处理多个视图【英文标题】:How to deal with many views in one UIViewController 【发布时间】:2014-02-23 18:16:58 【问题描述】:

我有一个拥有主视图的 ViewController。这个主视图包含另外两个视图,分别称为 leftView 和 rightView。

我希望在应用启动时隐藏这些“辅助”视图,我认为最好的方法是偏移 X 轴。

我想通过代码进行此偏移以使所有内容井井有条,但它不起作用 - 只有我在 Interface Builder 中执行此操作才有效!

我尝试了两件事,但都没有工作。

1:通过 AppDelegate:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions


    O_GViewController *mainController = (O_GViewController *)  self.window.rootViewController;
    [mainController leftView].frame = CGRectMake(-211, 20, 211, 548);
    [mainController rightView].frame = CGRectMake(320, 20, 320, 548);

    // Override point for customization after application launch.
    return YES;

2:通过 ViewController:

- (void)viewDidLoad

    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    //initialize secondary views
    leftView = [[UIView alloc]initWithFrame:CGRectMake(-211, 20, 211, 548)];
    rightView = [[UIView alloc]initWithFrame:CGRectMake(320, 20, 320, 548)];

两个“辅助”视图都与 ViewController.h 中的 *leftView 和 *rightView 绑定。

您知道如何通过代码完成这项工作吗?

谢谢

【问题讨论】:

【参考方案1】:

在启动时隐藏两个视图的最简单方法是将它们的hidden 属性设置为YES。您可以在 Interface Builder 中执行此操作。

如果您真的希望视图位于屏幕外,您当然可以这样做。但是,如果您使用自动布局(您几乎可以肯定),您不能通过设置它们的框架来做到这一点,因为自动布局只会根据约束再次设置它们的框架。你必须通过操纵约束来做到这一点。

【讨论】:

事实上我在这里有一个这种约束操作的例子:github.com/mattneub/Programming-ios-Book-Examples/blob/master/… 它发生在响应旋转,但这不是必需的;关键是它向您展示了如何交换约束,以便以与自动布局一致的方式改变界面。

以上是关于如何在一个 UIViewController 中处理多个视图的主要内容,如果未能解决你的问题,请参考以下文章

如何在其他 UIViewController 中显示 UIViewController?

如何在通用 UIViewController 之后设置自定义 UIViewController?

iOS:如何在弹出其子 UIViewController 后“刷新” UIViewController?

如何在不导入第一个 UIViewController 类的情况下从 UINavigationController 中的另一个 UIViewController 手动释放 UIViewControlle

iPad 应用程序,如何在 uiviewcontroller 之上显示 uiviewcontroller

如何从创建的 UIViewController 中的另一个 UIViewController 执行功能