2016-10-20 72 views
0

剛剛移動到Xcode8和iOS10,爲其中一個應用程序提供對iOS10的支持。iOS10 +漸變停止工作

找出奇怪的問題,突然Gradient不工作。

我發現應用Storyboard(Xcode8中的Storyboard更改)後,更改漸變對視圖不可見。

的Xcode 7.3 - 梯度視圖 -

enter image description here

的Xcode 8 - 梯度視圖 -

enter image description here

而且,如果我取代故事板老故事板就說明梯度,所以有新的Storyboard出現問題。

有一個在代碼中沒有變化:

[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]; 

讓我知道,如果任何一個想通了。

編輯:

我沒有創建新的故事板,我剛申請的變化低於Xcode8的建議

enter image description here

+0

「另外,如果我用故事板替換Storyboard,它會顯示漸變」然後在故事板中有一些關鍵的區別。比較他們並找到它。或者使用舊的故事板。 (你爲什麼做一個新的?) – matt

+0

你的代碼是確定的。在調試器下運行並檢查該視圖不是'nil',並且實際上應用漸變。將故事板中的背景設置爲不同的東西,如洋紅色。 – paiv

+0

@matt - 如果應用程序是用Xcode 7.x創建的,並且我們將它打開到Xcode8,它會在舊的Storyboard中進行更改,如何有辦法「在Xcode 7.x中打開」。但它不會允許我以這種方式打開Storyboard,它總是將其更改爲新的。沒有創建新的Storyboard它是相同的 – Kampai

回答

1

的問題是一直存在的時序變化的佈局。因此你的代碼現在運行得太快了。你在說

gradient.frame = view.bounds 

但是在這個時候,視圖有零邊界。所以梯度有零幀!這就是爲什麼你看不到它。你正在做viewDidLoad的佈局代碼。這總是錯誤的,現在你明白了爲什麼。

將您的代碼移動到viewDidLayoutSubviews。當時,觀點有其真實的界限。你將不得不使用一個條件,以便你的代碼只運行一次。

+0

哦,是的,我忘了框架!!!!! ....它現在工作。感謝隊友:) – Kampai

+0

我想知道,爲什麼它在Xcode7.x中工作得更早,代碼是在'viewDidLoad()'中,它在iOS7,iOS8和iOS9上工作。 – Kampai

+0

正如我所說:佈局時間有所改變。你之前的時間很幸運,但你做出的假設並不是必須的。 'viewDidLoad'不是幀被應用的信號。 'viewDidLayoutSubviews'是。 – matt