簡體   English   中英

如何在UIPopoverController(iOS7)中防止UITableView分隔符顏色變黑?

[英]How do I prevent UITableView separator color from turning black in UIPopoverController (iOS7)?

我的應用程序使用UITableViewController,它是UINavigationController的子代,UINavigationController是UIPopoverController的內容視圖控制器。 我正在定制UITableViewController的UITableView的外觀。 它適用於iOS 5和6,但它在iOS7中存在問題。 單元格的分隔符設置為白色,表格視圖最初顯示為正確的分隔符顏色。 但是,一旦我滾動表視圖並重新加載單元格(意味着調用了cellForRowAtIndexPath和willDisplayCell函數),新重新加載的單元格的分隔符都是黑色的。

我通過在UITableViewController的viewDidLoad函數中調用此函數來自定義分隔符顏色:

self.tableView.separatorColor = [UIColor whiteColor];

如果我在應用程序的其他地方使用完全相同的表視圖(而不是在UIPopoverController中),那么我沒有這個問題。

據我所知,文檔中沒有任何內容表明這對於iOS 7而言應該與5或6不同。也許這是一個iOS錯誤? 任何幫助將非常感激。

viewwillAppear設置它

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
        self.tableView.separatorColor = [UIColor whiteColor];
    }

希望這可以幫助

這個問題是一個iOS錯誤 - iOS7.0.4不再適用於我的問題。 我不確切知道它修復了哪個版本。所以沒有必要在viewWillAppear中重新加載數據或設置separatorColor。 在viewDidLoad中執行此操作就足夠了。

這個iOS錯誤仍然發生在iOS7.0.6中。 我有一張黑色背景和白色分隔線的桌子。 分隔線在UIPopover第一個視圖上以白色正確顯示,但在同一個彈出窗口的第二個和后續顯示中顯示為黑色。

在tableview上使用reloadData沒有幫助。

我能找到的唯一實用的解決方法是以下,這會導致重繪整個表:

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [_tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationNone];
}
- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    [_tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationNone];
}

筆記

1)如果僅使用viewWillAppear代碼,則分隔線會在再次變黑之前立即正確顯示。 如果僅使用viewDidAppear代碼,則在顯示彈出窗口后,分隔線變為白色之前會有明顯的延遲。 使用BOTH為用戶提供最直觀的無縫結果。

2)如果您的表有多個部分,那么您應該確保重新加載所有部分,因為用戶可能在隱藏彈出窗口之前滾動到另一個部分。

PS - 經過進一步測試,我發現即使這個解決方案也不完美。 重新顯示后,如果滾動表格,最初屏幕外的分隔符將再次恢復為黑色。 因此,只有當表沒有足夠的行超出彈出框的大小時,它才能正常工作。

兩條建議:
1.根本不要使用UITableViewController 它提供的自動化行為可以通過幾次調用輕松實現,同時也打破了良好的OOP實踐。
2.關於分隔符,不顯示分隔符,但在底部的每個單元格中添加UIView ,寬度等於單元格的寬度和高度為1磅。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM