2014-09-03 22 views
0

當調用UIActivityViewController並且用戶隨後選擇Messages選項時,我看到一個非常奇怪的UI效果。UIActivityViewController的SMS窗口變得部分透明

我已經減少所討論的代碼向下到裸細節:

NSArray *activityItems = @[@"Hello!"]; 
UIActivityViewController *activityController = [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:nil]; 
[self presentViewController:activityController animated:YES completion:nil]; 

當用戶選擇消息應用程序中,包含子視圖的「To:」字段具有梯度背景:

Initial view

然後,用戶開始輸入(沒什麼好驚訝這裏):

User typing

然後用戶刪除他們剛輸入的內容 - 導致「To:」視圖變爲透明。通過我的應用顯示的是UI。

After user deletes what they've typed

有沒有辦法讓「爲:」鑑於回來,雖然打字不工作(沒有顯示)。

上面的代碼在一個虛擬應用程序中正常工作。我相信這個應用程序中的某些內容會導致此問題,但我一直無法找到原因(甚至無法理解可能導致此問題的原因)。這是在UITableViewController中,但我已經將相同的代碼放入一個普通的UIViewController中,結果相同。我已經包裝了dispatch_async(dispatch_get_main_queue()...)調用,將statusBar設置爲可見等。沒有更改。任何建議感激!

解決方案

的罪魁禍首是在UINavigationBar的一個古怪的UIAppearance選擇:

[[UINavigationBar appearance] setBackgroundImage:[self whitePixelImage] forBarMetrics:UIBarMetricsDefault]; 

其中 「whitePixelImage」 正是你所期望的:

-(UIImage *)whitePixelImage { 
    return [self imageWithColor:[UIColor whiteColor]]; 
} 

-(UIImage *)imageWithColor:(UIColor *)color { 
    CGRect rect = CGRectMake(0.0f, 0.0f, 1.0f, 1.0f); 
    UIGraphicsBeginImageContext(rect.size); 
    CGContextRef context = UIGraphicsGetCurrentContext(); 

    CGContextSetFillColorWithColor(context, [color CGColor]); 
    CGContextFillRect(context, rect); 

    UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

    return image; 
} 

我懷疑是一個像素大小是問題,但由於應用程序的設計更改不再需要這個選擇器,我非常喜歡樂意去除整個生死的事情。

+0

這是否發生在設備或模擬器上? Quick Googling說UIActivityViewController在模擬器中有問題(我猜是因爲它依賴於一堆外部的設備專用服務)。 – 2014-09-03 21:41:51

+0

模擬器沒有消息應用程序,所以這是設備專用的。我還應該添加這是iOS 7。該應用程序是僅iOS 7,並且我還沒有在iOS 8設備上測試此功能。 – 2014-09-03 21:56:22

+0

我也嘗試從超級,self.navigationController,甚至從[ UIApplication sharedApplication] .keyWindow.rootViewController沒有改變。 – 2014-09-03 22:12:16

回答

1

問題是UINavigationBar上一個古怪的UIAppearance選擇器。該選擇器的細節添加到問題的底部。希望這會對某人有所幫助。