2013-09-05 68 views
0

我在下面這個教程梯度:在UITableView下面設置背景圖層?

http://danielbeard.wordpress.com/2012/02/25/gradient-background-for-uiview-in-ios/

,但我不能似乎下面插入我的tableView子層,該層被插入這樣:

CAGradientLayer *bgLayer = [BackgroundLayer blueGradient]; 
bgLayer.frame = self.view.bounds; 
[self.view.layer insertSublayer:bgLayer atIndex:0]; 

爲什麼會在我的故事板tableView上方?

編輯:

我的表視圖是有的,層以下,我可以點擊它和一切,但我不能看到它

+0

你從哪裏調用這段代碼?插入漸變圖層後添加表格視圖嗎? –

+0

在viewDidLoad –

+0

中調用通過故事板添加tableView –

回答

0

它應該工作,如果你把它放在viewDidAppear。但是,將大小設置爲self.view.bounds只會使漸變進入屏幕底部 - 滾動時,漸變將隨滾動。如果您希望漸變的長度與表視圖一樣長,則必須將其高度設置爲contentSize的高度。您還需要設置單元格的背景顏色清楚地看到梯度(中的tableView:willDisplayCell:forIndexPath :)

這種方法
-(void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 
    CAGradientLayer *bgGradient = [CAGradientLayer layer]; 
    bgGradient.frame = CGRectMake(self.tableView.bounds.origin.x, self.tableView.bounds.origin.y, self.tableView.bounds.size.width, self.tableView.contentSize.height); 
    bgGradient.colors = @[(id)[[UIColor colorWithRed:150/255.0 green:2150/255.0 blue:233/255.0 alpha:1.0] CGColor], (id)[[UIColor colorWithRed:208/255.0 green:210/255.0 blue:216/255.0 alpha:1] CGColor]]; 
    bgGradient.locations = @[@0.02f,@1.00f]; 
    [bgGradient setMasksToBounds:YES]; 
    [self.view.layer insertSublayer:bgGradient atIndex:0]; 

} 

的一個問題是,長度,因而看,的漸變將取決於表格視圖中的行數。如果您希望漸變保持相同的長度,您可能需要將其添加到窗口中(並使表視圖的背景顏色清晰)。

+0

如果self.view是表視圖(在使用UITableViewController時會爲true),它只會與表視圖一起滾動。 –

3

的方式,梯度將停留在表視圖後面,而不是滾動的tableView滾動時,這樣做的正確的方法是設置漸變中的的tableView

的backgroundView如何斯威夫特做到這一點3

let gradientLayer = CAGradientLayer() 
let bgView = UIView.init(frame: self.tableView.frame) 
bgView.layer.insertSublayer(gradientLayer, at: 0) 
self.tableView.backgroundView = bgView 
+0

如果還使用UIRefreshControl呢?這在設置爲backgroundView時也是最好的。所以這兩個似乎都是一個問題... – SteMa