在屏幕之间切换时边缘闪烁ios7

Posted

技术标签:

【中文标题】在屏幕之间切换时边缘闪烁ios7【英文标题】:Edge flicker when transitioning between screens ios7 【发布时间】:2014-02-05 10:09:08 【问题描述】:

升级到 xcode 5 后,我注意到在两个屏幕之间切换时屏幕边缘出现闪烁。闪烁显示为帧边缘的垂直白线。这似乎只发生在 ios7 上。

我在两个屏幕之间的转换是通过故事板转场实现的。

更新:

我通过添加以下内容解决了这个问题: self.view.clipsToBounds = YES; 我的看法。

【问题讨论】:

【参考方案1】:

我发现了这个问题。我必须在我的观点上将clipsToBounds 设置为YES。这解决了问题。

【讨论】:

我会给 +1000 这个。基本上,我的 iOS 应用程序中有复杂的图形,当我在视图顶部打开一个半透明视图时,我的 UITableViewCell 开始出现一些闪烁......不知道从哪里开始搜索......这已经解决了这个问题... :) 谢谢。 我应该对我所有的子视图做些什么吗?请回复【参考方案2】:

当您尝试从后台更新 UI 时,iOS7 中会出现此问题。为了避免上述情况,您应该使用GCD 方法更新UI,如下所示。

dispatch_sync(dispatch_get_main_queue(), ^
      // Update UI (e.g. Alert, label changes etc)
);

dispatch_async(dispatch_get_main_queue(), ^
      // Update UI (e.g. Alert, label changes etc)
);

这将确保在主队列中更新。

【讨论】:

view_did_load 在主线程中调用正确吗?因此,对于在那里进行的标签更改,我可以保持原样吗?我尝试将整个 viewWillAppear 函数放在 dispatch_async(dispatch_get_main_queue) 中,但问题仍然存在。我也无法在模拟器上重现 - 有没有办法在模拟器上轻松重现,以便我更容易测试? 您应该在 viewWillAppear 中为代码创建方法并调用该方法。您不应该直接调用 viewWillAppear。 是的,我会这样做以使其更清洁......但是,这不应该导致不同的行为正确吗? 我应该把dispatch_async放在哪里?在新定义的函数内部,还是在 viewWillAppear 内部,围绕函数调用?你知道我能不能在模拟器上重现吗? 我试过了,但问题仍然存在。【参考方案3】:

我在 iOS7 中遇到了 tableView Segues 的问题,而 clipsToBounds BOOL 对我没有任何帮助。对我来说,解决方法是在 viewDidAppear 中加载我的背景图像,而不是 viewDidLoad。下面的例子:

- (void)viewDidLoad

    [super viewDidLoad];

    tableData = [NSArray arrayWithObjects:@"First", @"Second", @"Third", nil];
    [self.tableView setSeparatorStyle:UITableViewCellSeparatorStyleNone];
    UIEdgeInsets inset = UIEdgeInsetsMake(5, 0, 0, 0);
    self.tableView.contentInset = inset;

//Don't load your background image or color here



-(void)viewDidAppear:(BOOL)animated

    [super viewDidAppear:animated];

    [[AppDelegate sharedInstance] setNavTitle:@"Title"];

//load your background image here

    self.parentViewController.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage     imageNamed:@"FirstViewBackground"]];
    self.tableView.backgroundColor = [UIColor clearColor];




【讨论】:

【参考方案4】:

好的,我已经解决了我的情况。

我在 Container View 中有一些自定义 UIView。容器视图的背景颜色(可能我不小心这样做了)设置为白色。在过渡之间,我看到白线闪烁(有时是随机的)。当我将容器的视图颜色设置为默认值时,过渡闪烁消失了。

【讨论】:

以上是关于在屏幕之间切换时边缘闪烁ios7的主要内容,如果未能解决你的问题,请参考以下文章

横向定位失败,屏幕闪烁

在 iOS7 中边缘滑动时,使键盘与 UIView 同步动画

iOS检测到屏幕左边缘外的拖动

投影仪连接笔记本电脑屏幕显示闪烁问题如何消除?

自定义在应用程序屏幕之间切换时可见的 Android 应用程序屏幕图像

使用 QStateMachine 在菜单屏幕之间切换