iOS tableView下拉刷新時出現(xiàn)logo圖標

比如微信首頁, tableView往下拉的時候,頂部會出現(xiàn)一個 logo。下拉刷新也是,下拉刷新時那些提示文字也是同樣的效果。
在網(wǎng)上查了很多方法,都沒有相應的解決方案。一般的說法都是說創(chuàng)建一張圖片,并且設置為tableView的backgroundView屬性,但是這樣做的弊端真是無窮多,backgroundView并不會隨著tableView一起滑動, 你還要自己去根據(jù)圖標設置 logo的偏移。
其實相當簡單,簡單到你簡直不敢相信自己的眼睛。
我們先來看下 tableView的層級機構(gòu)。
1、tableView有一個父視圖,我們來打印一下:

NSLog(@"%@",[self.tableView.superview class]);

打印結(jié)果為:

UIViewControllerWrapperView

對,沒錯,這就是tableView的父視圖。
我第一次的做法就是將我的logo圖片添加到tableView的self.tableView.superview上,確實能添加,在x-code的層級關(guān)系圖上能看到,然而,很失望,屏幕上圖標看不見。為什么看不見?難道被誰擋住了?
下面就是見證奇跡的時刻:
我將tableView往下滑,當我滑動一半的時候,停止滑動,手不要離開tableVIew,按住別放開,此時打開x-code的層級關(guān)系圖

看層級關(guān)系圖請復制鏈接:http://upload-images.jianshu.io/upload_images/3006981-05e16a976dbb19cf.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240

看到那張灰白色的,讓我們見證奇跡的View了嗎?它就是我們需要的,它是tableVIew的第一個子視圖。而且這個View具有彈簧效果,他的高度會隨著tableView的下滑而增加,并且底部緊貼 tableView的頂部。
下面是核心代碼(你需要的就是它):

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    
    // taleview的子視圖中,有一張彈簧似的View,這張view在tableView的正常狀態(tài)下的高度為0,然后隨著tableView的滑動,該View會隨著tableview的滑動而變高,其底部永遠緊貼tableView的頂部.我們應該遇到過這種現(xiàn)象,當我們把 tablview的背景色設置為白色時,往下滑tableView,我們會發(fā)現(xiàn)最頂端tableView的背景色為灰白色,這灰白色的View就是這張具有彈簧效果的view
    UIView *springview = self.tableView.subviews.firstObject;
    [springview insertSubview:self.topLogoImageView atIndex:0];
    
    [self.topLogoImageView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.size.mas_equalTo(CGSizeMake(40, 40));
        make.centerX.mas_equalTo(_topLogoImageView.superview);
        // 必須設置底部約束
        make.bottom.mas_equalTo(_topLogoImageView.superview).offset(-36);
    }];
}
//  懶加載,
- (UIImageView *)topLogoImageView {
    if (!_topLogoImageView) {
        _topLogoImageView = [[UIImageView alloc] init];
        _topLogoImageView.image = [UIImage imageNamed:@"login_logo"];
        _topLogoImageView.contentMode = UIViewContentModeScaleAspectFit;
        _topLogoImageView.backgroundColor = SPTableViewBackgroundColor;
    }
    return _topLogoImageView;
}

最后附上幾個注意的地方:
1、我這里用的是 masonry約束布局,不管你用的是什么布局,topLogoImageView的底部必須固定好。比如你用普通frame布局,那么y值應該是

2、添加_topLogoImageView的時候用 insertSubview: atIndex:,不要用addSubView:
3、一定要保證要保證tableView的頂點是從導航欄的左下角開始,而不是左上角。比如:導航欄的屬性translucent設置為NO(iOS7或 iOS7以上默認為NO )
4、添加_topLogoImageView最好在- (void)viewDidAppear:(BOOL)animated里添加。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,839評論 4 61
  • 1.尺寸適配1.原因 iOS7中所有導航欄都為半透明,導航欄(height=44)和狀態(tài)欄(height=20)不...
    LZM輪回閱讀 6,397評論 1 4
  • 1.代理模式定義 給某個對象提供一個代理對象,并由代理對象控制對于原對象的訪問,即客戶不直接操控原對象,而是通過代...
    kecai閱讀 408評論 0 0
  • 01 高中那段時間,學校是不讓學生帶手機的,自己最珍貴的便是那副隨身聽了。 每天上完晚自習的時候,自己插上耳機,聽...
    古小楓閱讀 373評論 0 1
  • 感恩主持及大師姐喜悅分享, 感恩鳳凰嫻老師精彩傳遞,感恩同泰家族伙伴為我們搭建的平臺, 更感恩同泰家人的在線聆聽與...
    斯拓之海閱讀 355評論 0 0

友情鏈接更多精彩內(nèi)容