關注自定義status bar已有一段時間了,apple文檔HUM卻說不能自定義,而我在appstore上卻看到了一些應用,卻自定義了。不知道是否會被拒。網上有一個開源的做得比較好了。地址:https://github.com/myell0w/MTStatusBarOverlay
它的說明文檔也比較清楚,用法也簡單。它有兩種detailView模式,一種是textDetail,一種是historyDetail,比如我設置的history detail model這樣就可以在點status bar的時候在tableview中看到已經post 的message。代碼如下:
- MTStatusBarOverlay *overlay = [MTStatusBarOverlay sharedInstance];
- overlay.animation = MTStatusBarOverlayAnimationFallDown; // MTStatusBarOverlayAnimationShrink
- overlay.detailViewMode = MTDetailViewModeHistory; // enable automatic history-tracking and show in detail-view
-
- [overlay postMessage:@"Following Twitter…" animated:YES];
- [overlay postMessage:@"Following Twitter1…" animated:YES];
- [overlay postMessage:@"Following Twitter2…" animated:YES];
這樣卻沒有意料中的彈出table view顯示history post message.
如果設為overlay.detailViewMode = MTDetailViewModeDetailText;則可以正常彈出一個view. 難道是代碼原因。
於是研究了一下源碼,發現問題所在。
在- (void)setDetailViewHidden:(BOOL)hidden animated:(BOOL)animated {}方法中計算historyTableView的frame的時候y有點問題。
源碼中是這樣的
- y = -(kMaxHistoryTableRowCount - MIN(self.messageHistory.count, kMaxHistoryTableRowCount)) * kHistoryTableRowHeight;
問題就在MIN這個宏。如果改為
- uint count = self.messageHistory.count;
- y = -(kMaxHistoryTableRowCount - MIN(count, kMaxHistoryTableRowCount)) * kHistoryTableRowHeight;
就可以正常顯示了。
我的OS version: lion 10.7.3
xcode:4.2.1
ios sdk: iOS 5.0