歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> iOS自定義Status Bar

iOS自定義Status Bar

日期:2017/3/1 10:25:26   编辑:Linux編程

關注自定義status bar已有一段時間了,apple文檔HUM卻說不能自定義,而我在appstore上卻看到了一些應用,卻自定義了。不知道是否會被拒。網上有一個開源的做得比較好了。地址:https://github.com/myell0w/MTStatusBarOverlay


它的說明文檔也比較清楚,用法也簡單。它有兩種detailView模式,一種是textDetail,一種是historyDetail,比如我設置的history detail model這樣就可以在點status bar的時候在tableview中看到已經post 的message。代碼如下:

  1. MTStatusBarOverlay *overlay = [MTStatusBarOverlay sharedInstance];
  2. overlay.animation = MTStatusBarOverlayAnimationFallDown; // MTStatusBarOverlayAnimationShrink
  3. overlay.detailViewMode = MTDetailViewModeHistory; // enable automatic history-tracking and show in detail-view
  4. [overlay postMessage:@"Following Twitter…" animated:YES];
  5. [overlay postMessage:@"Following Twitter1…" animated:YES];
  6. [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有點問題。

源碼中是這樣的

  1. y = -(kMaxHistoryTableRowCount - MIN(self.messageHistory.count, kMaxHistoryTableRowCount)) * kHistoryTableRowHeight;

問題就在MIN這個宏。如果改為

  1. uint count = self.messageHistory.count;
  2. y = -(kMaxHistoryTableRowCount - MIN(count, kMaxHistoryTableRowCount)) * kHistoryTableRowHeight;

就可以正常顯示了。


我的OS version: lion 10.7.3

xcode:4.2.1

ios sdk: iOS 5.0

Copyright © Linux教程網 All Rights Reserved