iOS10 +渐变停止工作[重复]

Posted

技术标签:

【中文标题】iOS10 +渐变停止工作[重复]【英文标题】:iOS10 + Gradient stop working [duplicate] 【发布时间】:2016-10-20 10:27:04 【问题描述】:

刚刚被移到Xcode8和ios10,提供对iOS10支持的应用之一。

找出奇怪的问题,突然渐变不起作用。

我发现在应用 Storyboard(Xcode8 中的 Storyboard 更改)后会更改视图不可见的渐变。

Xcode 7.3 - 渐变视图 -

Xcode 8 - 渐变视图 -

另外,如果我用旧的故事板替换故事板,它会显示渐变,所以新的故事板有问题。

代码没有变化:

[view setOpaque:NO];
view.layer.cornerRadius = 45;
view.backgroundColor = [UIColor colorWithRed:23.0/255.0 green:29.0/255.0 blue:36.0/255.0 alpha:1.0];

CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = view.bounds;

UIColor *color1 = [UIColor colorWithRed:33.0/255.0 green:39.0/255.0 blue:46.0/255.0 alpha:1.0];
UIColor *color2 = [UIColor colorWithRed:23.0/255.0 green:29.0/255.0 blue:36.0/255.0 alpha:1.0];
UIColor *color3 = [UIColor colorWithRed:14.0/255.0 green:20.0/255.0 blue:26.0/255.0 alpha:1.0];

NSArray *colorsArray = @[(id)color1.CGColor, (id)color2.CGColor, (id)color3.CGColor];

gradient.colors = colorsArray;
[gradient setLocations:@[@0.0, @0.35]];
[view.layer insertSublayer:gradient atIndex:0];

如果有人知道,请告诉我。

编辑:

我没有创建新的 Storyboard,我只是按照 Xcode8 的建议应用了以下更改

【问题讨论】:

“另外,如果我用旧的情节提要替换情节提要,它会显示渐变” 那么情节提要中有一些至关重要的区别。比较它们并找到它。或者使用旧的故事板。 (你为什么要制作一个新的?) 你的代码没问题。在调试器下运行并检查视图不是nil,并且您实际应用了渐变。将情节提要中的背景设置为不同的颜色,例如洋红色。 @matt - 如果应用程序是使用 Xcode 7.x 创建的,并且我们将其打开到 Xcode8,它会在旧的 Storyboard 中进行更改,但是有没有办法“在 Xcode 7.x 中打开”。但它不允许我以这种方式打开 Storyboard,它总是将其更改为新的。没有创建新的故事板它是一样的 有什么变化?当我升级到 Xcode 8 时,我不必为我的任何应用程序制作新的故事板。 @matt:请检查已编辑的问题 【参考方案1】:

问题是布局的时间发生了变化。因此,您的代码现在运行得太快了。你在说

gradient.frame = view.bounds

但此时,视图的边界为零。所以梯度有零帧!这就是为什么你看不到它。您正在viewDidLoad 中编写布局代码。这总是错误的,现在你明白为什么了。

将您的代码移至viewDidLayoutSubviews。那个时候,view有其真正的界限。您将不得不使用一个条件,以便您的代码只运行一次。

【讨论】:

哦,是的,我忘记了框架!!!!!!....它现在可以工作了。谢谢队友:) 我想知道,为什么它在早期的 Xcode7.x 中工作,代码在 viewDidLoad() 并且它适用于 iOS7、iOS8 和 iOS9。 正如我所说:布局的时间发生了变化。您之前的时机很幸运,但您做出的假设并不一定是正确的。 viewDidLoad 不是帧已被应用的信号。 viewDidLayoutSubviews 是。 好的,再次感谢。注意到

以上是关于iOS10 +渐变停止工作[重复]的主要内容,如果未能解决你的问题,请参考以下文章

iOS 8 在 10 分钟后停止在后台流式传输音频

在 iOS 10.3 上停止蓝牙警报弹出

AFNetworking 在 iOS 6 下停止工作

带有 UIActionSheet IOS 8 的 UIPickerView 停止工作

wkwebview ios 10在重新创建webview后停止使用localfileurl加载文件

在 iOS 上配置 Firebase 应用后,Branch.io 深层链接停止工作