1

我正在关注本教程的渐变:

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 上方?

编辑:

我的表格视图在那里,在图层下方,我可以单击它和所有内容,但我看不到它

4

3 回答 3

6

这样做的正确方法是在tableView滚动时渐变将留在table view后面而不滚动是在tableView的backgroundView中设置渐变

如何在 Swift 3 中做到这一点

let gradientLayer = CAGradientLayer()
let bgView = UIView.init(frame: self.tableView.frame)
bgView.layer.insertSublayer(gradientLayer, at: 0)
self.tableView.backgroundView = bgView
于 2017-03-20T00:32:40.847 回答
1

如果你把它放在 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];

}

这种方法的一个问题是渐变的长度以及外观会根据表格视图中的行数而变化。如果您希望渐变保持相同的长度,您可能希望将其添加到窗口中(并使表格视图的背景颜色清晰)。

于 2013-09-05T15:32:24.957 回答
0

对于面临此问题的任何人:

如果您使用的是UITableViewController您需要在生命周期的后期设置自定义视图,例如viewDidLayoutSubviews The reason is in viewDidLoadtableView frame is not being set yet.

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    
    let backgroundView = UIView(frame: tableView.bounds)
    backgroundView.backgroundColor = .white
    backgroundView.layer.insertSublayer(bgLayer, at: 0)
    
    tableView.backgroundView = backgroundView
} 
于 2020-11-13T17:31:48.727 回答