1. IOS开发中,如果在XIB文件中创建一个scrollview,同时给它设置布局限制,然后在对应的.m文件中修改它的contentsize,修改不起作用
应该就是勾选了autolayout选项,导致的。
在autolayout下,ios计算scrollview的contentsize的机制是略有不同的。
在autolayout下,会在viewDidAppear之前根据subview的constraint重新计算scrollview的contentsize。
这就是为什么,在viewdidload里面手动设置了contentsize没用。因为在后面,会再重新计算一次,前面手动设置的值会被覆盖掉。
解决办法就是:
- 去除autolayout选项,自己手动设置contentsize
- 如果要使用autolayout,要么自己设置完subview的constraint,然后让系统自动根据constraint计算出contentsize。
- 要么就在viewDidAppear里面自己手动设置contentsize。
2. URL 直接跳转到 appstore
NSString *str = [NSString stringWithFormat:@"itms-apps://itunes.apple.com/app/id1079700858"];
NSURL * url = [NSURL URLWithString:str];
if ([[UIApplication sharedApplication] canOpenURL:url]){
[[UIApplication sharedApplication] openURL:url];
}else{
NSLog(@"跳转失败");
}
3. AVAudioPlayer 初始化时报错
未能完成操作。(“OSStatus”错误 2003334207。)
这种情况是很有可能是因为播放地址错误或者音频文件不存在
4. MJRefresh 有时候 mj_footer 的 block 并没有回调
MJRefreshBackNormalFooter footerWithRefreshingBlock 没有调用
self.tableView.mj_footer = [MJRefreshBackNormalFooter footerWithRefreshingBlock:^{
[self.tableView.mj_footer beginRefreshing];
[self getRankData];
}];
�有时候并没有任何反应,此时只需要加入一行代码:
self.tableView.mj_footer.automaticallyHidden = NO;
5. 使用 xib 或者 storyBoard 设置约束问题
加载界面时底部控件刚开始会出现在远离底部的位置(即使设置距离底部为0),而后又向下 移动到预期的位置
这是由于设置底部约束的时候,选择的是 bottom layout guide line 而不是 view 的 bottom
6. scheduledTimerWithTimeInterval target 导致的强引用
由于定时器在运行的时候是无法释放的,所以如果在控制器或其他拥有 timer 的 deadlock 方法中释放是没有什么卵用的,这个时候可以
- 在视图消失的时候调用
[_timer invalidate]
来停止,再设置 timer = nil - 在 iOS10可以使用
[NSTimer scheduledTimerWithTimeInterval:1 repeats:YES block:^(NSTimer * _Nonnull timer) {
//your code
}];
来避免这个问题