解決xib自定義tableFooterView一個神奇的bug

吳尼瑪發表於2017-12-19

最近看視訊學習,做一個demo的時候碰到一個神奇的bug,後來經過各種搜尋、除錯和修改程式碼雖然把這個bug解決了,但不知道為什麼。這裡打算把這個過程分享出來,給大家做參考順便也求大神來指導下。

事情是這樣的,我打算用xib自定義一個UIView,然後將他設定為tableView的tableFooterView以實現下面這樣的效果。

點選載入更多.gif

其中我xib中的控制元件是這樣的。在xib上首先放一個點選載入更多的UIButton。然後放一個正在載入的UIView,這個View裡面有一個UIActivityIndicatorView和正在載入更多資料的UILabel,並且一開始隱藏這個View,點選Button後顯示它。最後設定好各個約束。

xib.png

設定tableFooterView的程式碼是這樣的。

    WKLoadMoreFooter *footerView = [WKLoadMoreFooter loadMoreFooter];
    footerView.delegate = self;
    _dealsTable.tableFooterView = footerView;
複製程式碼

為了能看清,我給xib設定了個背景色,效果是這樣的。Button的文字呢,當時我是懵逼的。

懵逼的效果.png

於是我設定了半天的Button、Label等等控制元件的文字顏色和背景色,發現都沒有用,點選後雖然能載入,但是一直就是這個粉紅色的。然後,我突然想到是不是這個UIView的高度問題。於是就把他設定成tableHeaderView,果然效果就出來了,它被拉高了,覆蓋了下面的兩個cell。

將自定義的控制元件設定成tableHeaderView的效果.png

之後我就找了半天怎麼設定tableHeaderView的高度,試了好多種方法都沒有什麼用。最後終於找到一個方法解決了這個bug,就是手動建立一個UIView ,設定這個UIView為tableHeaderVIew,再把xib的UIView放在這個UIView上面。程式碼如下:

    UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 44)];
    _dealsTable.tableHeaderView = headerView;
    WKLoadMoreFooter *loadMoreFooterView = [WKLoadMoreFooter loadMoreFooter];
    footerView.delegate = self;
    footerView.frame = CGRectMake(0, 0, _dealsTable.frame.size.width, 44);
    [headerView addSubview: loadMoreFooterView];
複製程式碼

終於正常啦!.png

最後將xib的背景色改回來,將其改為tableFooterView,前面想要的效果就出來了。如果你也遇到這樣類似的問題可以嘗試用這個方法去解決。然而,雖然解決了這個問題,但心中充滿疑惑,到底這個xib建立的UIView設定成tableFooterView的時候發生了什麼呢,求大神們指教。

iOS新手,也求大神們勿噴。

相關文章