1、运行程序后,模拟器上不是按Xib上的UI显示的
今天开始使用Xib,奇怪地发现在Xib上布好的UI局,运行起来在模拟器上不是按Xib上的UI显示的,有些控件被另一些覆盖了。
解决方案是:第一步:选中目标 ".xib"文件。选取右边最上面那排的第一个像A4纸一样的图标,然后在下面找到 "Use Autolayout",将它前面的"钩"去掉。如图所示:
第二步:选中目标 ".xib"文件。选取右边最上面那排的第四个像人头一样的图标,然后在"Simulated Metrics" -------> 选中“Size”----------> 将它设置为“Retina 3.5 Full Screen”。如图所示
做完上面两步,模拟器上运行的结果就和Xib上布的局一样了。
2、xib 怎样加载到一个UIViewController上面?
有两种做法:方法一,在建文件时,选上"With XIB for user interface",这个时候的XIB文件名和.h .m 的文件名一致,只是后缀名不一样。见下图:
方法二,自己单独新建一个XIB文件。“User Interface” -------> "View" ---------> "next"。见下图:
“next”后选iPhone,点击"next",为文件起名,注意千万不要加".xib"。
但是第二种方法创建的.xib没有加到UIViewController上,按下图所示,选中".xib"文件 ------> 选中"File’s Owner " (一定要选它呀) ------>选取右边最上面那排的第三个图标 ----------> 找到Custom Class -------->Class 里面写上要关联的 文件名。
3、如何从一个界面推到另外一个界面?
//因为是用xib,所以要用initWithNibName:这个方法,后面接xib的文件名SecViewController。注意不能写成SecViewController.xib,写成 XXX.xib 就找不到了
在第二步中,如果是用第一种方法创建的 Xib 文件,就用下面这条语句
SecViewController * secCtrl = [[SecViewControlleralloc] initWithNibName:@"SecViewController"bundle:nil];
在第二步中,如果是用第二种方法创建的 Xib 文件,就用下面这条语句
SecViewController * secCtrl = [[SecViewController alloc] initWithNibName:@"WJFirstView" bundle:nil];
以上两条语句二选一
(如果没有UINavigationController,那么只能用 "presentViewController:"这个方法来推界面,如果有UINavigationController,用
[self.navigationController pushViewController:secCtrl animated:YES];
)[self presentViewController:secCtrl animated:YES completion:^{
}];