一、 iOS 连续多次 Present VC,dismiss 之后可能异常
记住: 谁present 谁dismiss。
我们习惯都是在presented VC直接dismiss的,一般不会出现问题,但是多次present之后,在dismiss可能就会出现异常。
官方给出的属性解释:
// The view controller that was presented by this view controller or its nearest ancestor.
@property(nullable, nonatomic,readonly) UIViewController *presentedViewController NS_AVAILABLE_IOS(5_0);
// The view controller that presented this view controller (or its farthest ancestor.)
@property(nullable, nonatomic,readonly) UIViewController *presentingViewController NS_AVAILABLE_IOS(5_0);
用presentingViewController dismissViewControllerAnimated:
就不会出现异常了。
二、设置navigationItem.left/rightBarButtonItem 异常
如果不是特殊情况,能用系统方法直接搞定的,强烈推荐用系统方法(UIBarButtonItem
)设置。
举个栗子:
//类似这种直接设置initWithImage/initWithTitle
UIBarButtonItem *scanButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"scan_code"] style:UIBarButtonItemStylePlain target:self action:@selector(pushScanController)];
self.navigationItem.leftBarButtonItem = scanButton;
用系统方法简单,而且不用调整边距,所有边距都一样;用自定义View方法(initWithCustomView:
),可能要调整边距等问题产生。
注意:
如果复杂的要自定义view方法设置self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:customView];
如果customView 是UIButton,在iOS 11系统以下,必须要设置UIButton的frame,否则不会显示出来。在iOS 11系统可以不设置UIButton的frame,系统会根据你设置的Button图片或是文本自适应一个frame。
由于一直在iOS 11系统上开发,忘记了设置frame,也显示正常,导致在其他系统上出现了这样一个BUG。
最近开发又遇见了一个问题:使用系统的方法initWithImage
设置一个BarButtonItem。但是这Item可能不显示,因此就这么设置了一下:
barButtonItem.image = nil;
就是这句话导致在iOS 11系统以下不能显示了。
解决办法:
barButtonItem.image = [UIImage New];
也是由于没有设置frame方法导致的。
三、打包上传Error汇总
四、彻底删除NSUserDefaults方法
NSString *appDomain = [[NSBundle mainBundle] bundleIdentifier];
[[NSUserDefaults standardUserDefaults] removePersistentDomainForName:appDomain];
五、重置苹果测试设备数量限制方法
六、国际化适配UI
国际化有的国家习惯从左到右,而有的国家习惯从右到左。
在iOS 9之后,苹果大大已经为我们做了UI适配。在我们使用约束布局的时候,使用leading和trailing
而不用left和right
。即可自动实现左右切换。
但是我们不想让它按着国家左右切换呢,直接强制写死方向:
只在iOS 9系统以后生效: 设置这个属性,强制确定方向即可。
if ([[UIDevice currentDevice].systemVersion floatValue] > 9.0) {
[UIView appearance].semanticContentAttribute = UISemanticContentAttributeForceLeftToRight;
}
网友评论