UIActivityViewController的SMS窗口变得部分透明

时间:2014-09-03 21:14:30

标签: ios sms uiactivityviewcontroller

我在调用UIActivityViewController时看到一个非常奇怪的UI效果,用户随后选择了Messages选项。

我将有问题的代码简化为详细信息:

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

当用户选择消息应用时,包含“收件人:”字段的子视图具有渐变背景:

Initial view

然后用户开始输入(这里没什么好处的):

User typing

然后用户删除他们刚刚输入的内容 - 导致“收件人:”视图变为透明。从我的应用程序中显示的是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;
}

我怀疑是一个像素大小是问题,但由于应用程序的设计更改不再需要这个选择器,我很高兴删除整个darned事情。

1 个答案:

答案 0 :(得分:1)

问题是UINavigationBar上的一个古怪的UIAppearance选择器。该选择器的细节添加到问题的底部。希望这对某人有帮助。