如何在一个 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