IOS开发记录2017.08.24

这次公司需求做完版本上线,趁着间隙,写一些在这次版本开发中代码上遇到的问题记录和整个开发感受的一点想法。

关于开发

1.

导航栏显隐
导航栏显隐

这里主要用了UIScrollView两个代理:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView;
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
第一个可以得到当前scrollview的contentoffset从而设置导航栏和头部的alpha值来控制显隐,第二个是在用户滑动到中间时判断位置上下自动滑动避免只滑到中部的情况,具体代码:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
    
    if (scrollView.contentOffset.y <= 0) {
        scrollView.bounces = false;
    } else if(!scrollView.bounces) {
        scrollView.bounces = true;
    }
    
    CGFloat minAlphaOffset = 0;
    
    CGFloat maxAlphaOffset = 138-64;
    
    CGFloat offset = scrollView.contentOffset.y;
    
    CGFloat alpha = (offset - minAlphaOffset) / (maxAlphaOffset - minAlphaOffset);
    
    self.barView.alpha = alpha;
    self.headView.alpha = 1-alpha;
}
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
    CGFloat offset = scrollView.contentOffset.y;
    if (offset < 74 && offset > 0) {
        if (offset < 37) {
            [self.tableView setContentOffset:CGPointMake(0, 0) animated:true];
        } else {
            [self.tableView setContentOffset:CGPointMake(0, 74) animated:true];
        }
    }
}

2.tableView页的刷新逻辑,目前我是设置了一个布尔类型的标记isFetch表示是否在网络请求保证同一时间只有单一请求,在网络请求的时候判断并设成true,在请求失败或请求成功并且reloaddata后设回为false。
这里要注意因为reloaddata是异步的,所以在设置时需要放在主线程上:

[self.tableView reloadData];
            dispatch_async(dispatch_get_main_queue(), ^{
                //刷新完成,执行后续代码
                self.isFetch = false;
            });

3.对于页面上的UI,如果一个页面只创建一次使用一个的话,建议使用懒加载,把关于这个控件的东西都放在加载里设置。比如我要创建一个tableView,还要设置tableHeaderView并且headerView本身也需要多个控件,那么我就会这样写:

- (UIView *)headerView
{
    if(!_headerView) {
        _headerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, 194)];
        _headerView.backgroundColor = [UIColor colorWithRed:0Xec/255.0 green:0Xec/255.0 blue:0Xec/255.0 alpha:1.0];
        
        [_headerView addSubview:self.contentImageView];
        [_headerView addSubview:self.moreButton];
        [_headerView addSubview:self.sendBtton];
        [_headerView addSubview:self.divideView];
        [_headerView addSubview:self.moreFunctionView];
    }
    return _headerView;
}

- (UITableView *)tableView
{
    if (!_tableView) {
        _tableView = [[UITableView alloc] init];
        _tableView.frame = CGRectMake(0, 0, kScreenWidth, kScreenHeight-64);
        _tableView.delegate = self;
        _tableView.dataSource = self;
        _tableView.backgroundColor = [UIColor colorWithRed:0Xf7/255.0 green:0Xf7/255.0 blue:0Xf7/255.0 alpha:1.0];
        _tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
        _tableView.showsVerticalScrollIndicator = false;
        [self.view addSubview:_tableView];
        
        _tableView.tableHeaderView = self.headerView;
        _tableView.tableFooterView = [UIView new];
        
        MJRefreshNormalHeader *header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(pulldownFetch)];
        header.lastUpdatedTimeLabel.hidden = true;
        _tableView.mj_header = header;
        _tableView.mj_footer = [MJRefreshBackNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(fetchServiceNoticeList)];
    }
    return _tableView;
}

以此类推,其他的UI也各自写好自己的懒加载方法。这样的好处是只要设置好了就不用再使用时想是否已经创建并且去在想修改某个控件时可以轻松定位。
对于数据也是如此。

4.从没有navagationbar页面跳转到有navigationbar页面的时候把显示navigationBar方法放push后面,如:

[self.navigationController pushViewController:vc animated:true];
self.navigationController.navigationBarHidden = false;

这样在跳转的时候页面不会提前下移。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,016评论 4 62
  • 1.badgeVaule气泡提示 2.git终端命令方法> pwd查看全部 >cd>ls >之后桌面找到文件夹内容...
    i得深刻方得S阅读 4,628评论 1 9
  • 可能配色上还是有点问题吧我感觉………
  • 【上一章】超凡探长(十一)(目录) 话说谭铭将杜边的妻子带回到警察局,安排了她探望了杜边,并说服她暂时不要回家。加...
    熊六阅读 220评论 8 3
  • 还是把邮件发了出去,至少是一种期许吧,或许什么都不会获得,也或者有所转机,但一切都是得之所幸,失之所命,争取了不一...
    聂一一阅读 127评论 0 0