1. 弹出一个对话框,我是用GCD 在当前页面中进行延时弹出,有一次,我在没到延时的时候返回,对话框依旧出现,点击直接崩溃。后来在显示时加入了一个判断给解决了。
if (self.view.window != nil) {//可以判断当前ViewController是否显示
//your code
}
2. 我一个小项目里面,是一个TabBar 嵌套了几个NavigationController,在进入下一级页面的时候,需要隐藏Tabbar,我用的是系统自带的,动画都是默认的。
[presentViewController setHidesBottomBarWhenPushed:YES];
3. iOS开发中,基本上都要使用delegate,使用delegate的时候,最好特别的在ViewController的delloc中将delegate赋值为nil,不然有时候会直接闪退,有点类似于野指针的概念,nil接受消息不会有任何问题。
self.delegate = nil;
4. iOS7 中 状态栏的高度是20px,导航栏高度是44px,总共就是64px。
5. iOS7中, UINavigationController中增加一个了可以通过从最左边向右滑动返回上一级ViewController。
@property(nonatomic, readonly) UIGestureRecognizer *interactivePopGestureRecognizer NS_AVAILABLE_IOS(7_0);
通过设置interactivePopGestureRecognizer的enable属性可以用来控制是否允许用户右拉返回。
@property(nonatomic, getter=isEnabled) BOOL enabled; // default is YES. disabled gesture recognizers will not receive touches. when changed to NO the gesture recognizer will be cancelled if it's currently recognizing a gesture
使用方法: self.navigationController.interactivePopGestureRecognizer.enabled = NO(YES);
6. 通过NSBundle获得资源所在的全路径,我的资源是pointer@2x.png,放在external文件夹下,不是group。有两种方法:
1. NSString *imageFullPath =[[NSBundle mainBundle] pathForResource:@"pointer@2x" ofType:@"png" inDirectory:@"external"]; //注意需要加上@2x,不然找不到
2. NSString *imageFullPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"external/pointer"]; //不需要加上@2x
真机上的目录是:/var/mobile/Applications/4FE5384E-180D-4875-9771-FB4A734CC012/xxxxx.app/external/pointer
3. 如果是group的话直接:
NSString *str=[[NSBundle mainBundle] pathForResource:@“pointer@2x" ofType:@"png"]; //@2x必须的
真机上的目录是:/var/mobile/Applications/4FE5384E-180D-4875-9771-FB4A734CC012/xxxxx.app/pointer@2x.png
7. UIVIew setNeedsDisplay 会清空 UIView矩形区域的所有内容
8.iOS7中UIViewController中有一个属性
@property(nonatomic,assign) UIRectEdge edgesForExtendedLayout NS_AVAILABLE_IOS(7_0); // Defaults to UIRectEdgeAll
这个属性是取代了
@property(nonatomic,assign)BOOL wantsFullScreenLayoutNS_DEPRECATED_IOS(3_0,7_0);// Deprecated in 7_0, Replaced by the following(就是上面那个属性):
在iOS 7中,视图控制器都是全屏的。四周边缘均延伸,就是说,如果即使视图中上有navigationBar,下有tabBar,那么视图仍会延伸覆盖到四周的区域,这样你原本在iOS6下面放的UIView的frame的(0,0,x,x) 中需要加上64 才能以同样的效果展示在iOS7中。通过设置为UIRectEdgeNone或者UIRectEdgeBottom,这样你就和iOS6下用同样的布局。我测试的时候发现iO7下4s 的 portrait和 landscape下导航栏的高度还不一样。
注意:这样做会出现一个问题,当你按Home键的时候,然后再重新回到应用时,原来的导航栏会出现黑色不透明,然后才消失。+64还是很靠谱的做法的,不过这样以来苹果以后更新变化也得跟着变化,不太灵活。
另外,同时新增了几个属性有一个属性是
extendedLayoutIncludesOpaqueBars:
如果你使用了不透明的操作栏,设置edgesForExtendedLayout的时候也请将extendedLayoutIncludesOpaqueBars的值设置为YES(默认值是NO),在工程刚创建的时候有选择NavBar是否为透明。
Setting this property to YES causes the receiver to block the delivery of touch events to other views in the same window. The default value of this property is NO.