iOS 开发问题记录

1. IOS开发中,如果在XIB文件中创建一个scrollview,同时给它设置布局限制,然后在对应的.m文件中修改它的contentsize,修改不起作用

应该就是勾选了autolayout选项,导致的。

在autolayout下,ios计算scrollview的contentsize的机制是略有不同的。

在autolayout下,会在viewDidAppear之前根据subview的constraint重新计算scrollview的contentsize。

这就是为什么,在viewdidload里面手动设置了contentsize没用。因为在后面,会再重新计算一次,前面手动设置的值会被覆盖掉。

解决办法就是:

  1. 去除autolayout选项,自己手动设置contentsize
  2. 如果要使用autolayout,要么自己设置完subview的constraint,然后让系统自动根据constraint计算出contentsize。
  3. 要么就在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 方法中释放是没有什么卵用的,这个时候可以

  1. 在视图消失的时候调用 [_timer invalidate] 来停止,再设置 timer = nil
  2. 在 iOS10可以使用
     [NSTimer scheduledTimerWithTimeInterval:1 repeats:YES block:^(NSTimer * _Nonnull timer) {
            //your code
        }];

来避免这个问题

你可能感兴趣的:(iOS 开发问题记录)