我在调用UIActivityViewController时看到一个非常奇怪的UI效果,用户随后选择了Messages选项。
我将有问题的代码简化为详细信息:
NSArray *activityItems = @[@"Hello!"];
UIActivityViewController *activityController = [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:nil];
[self presentViewController:activityController animated:YES completion:nil];
当用户选择消息应用时,包含“收件人:”字段的子视图具有渐变背景:
然后用户开始输入(这里没什么好处的):
然后用户删除他们刚刚输入的内容 - 导致“收件人:”视图变为透明。从我的应用程序中显示的是UI。
虽然打字确实有效(没有任何内容显示),但是无法获得“收件人:”视图。
上面的代码在虚拟应用程序中运行良好。我确定这个应用程序中的某些东西导致了这个问题,但我一直无法找到原因(或者甚至不知道是什么原因造成的)。这是在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;
}
我怀疑是一个像素大小是问题,但由于应用程序的设计更改不再需要这个选择器,我很高兴删除整个darned事情。
答案 0 :(得分:1)
问题是UINavigationBar上的一个古怪的UIAppearance选择器。该选择器的细节添加到问题的底部。希望这对某人有帮助。