UIImageview 上的 CAGradient 层在 iphone 6 秒内向上移动,同时在 iphone 5 内正确设置

CAGradient layer on UIImageview moving upwards in iphone 6s plus while setting correctly in iphone 5

在我的 viewDidLoad 中,我正在调用方法:

[self applyGradientOnDogImageView];

-(void)applyGradientOnDogImageView{

CAGradientLayer *gradient = [CAGradientLayer layer];

gradient.frame = CGRectMake(self.dogImageView.bounds.origin.x, self.dogImageView.bounds.origin.y+self.dogImageView.bounds.size.height/2, self.dogImageView.bounds.size.width, self.dogImageView.bounds.size.height/2);

gradient.colors = [NSArray arrayWithObjects:(__bridge id)[[UIColor clearColor] CGColor], (__bridge id)[[[UIColor blackColor] colorWithAlphaComponent:1.0] CGColor], nil];

[self.dogImageView.layer insertSublayer:gradient atIndex:0];

}

在 iphone 5 我得到这个输出:

在 iphone 6 秒后得到此输出:

如何解决梯度在iphone 6s plus内向上移动的问题?

创建图层后图像正在调整大小,但图层没有。解决这个问题的最简单方法是创建一个包含图层的 UIView 子类。然后你可以响应大小变化并调整图层大小

在 viewDidLoad 中,视图的大小尚未针对特定设备进行调整。因此,您的渐变框架将是错误的。

您应该在 viewWillAppear 中调用依赖于布局正确的代码,并且您还应该在 viewDidLayoutSubviews 方法中调整它们。

因此,不要从 viewDidLoad 调用您的 applyGradient 方法,而是从 viewWillAppear 调用它,并编写更新图层框架的代码并从 viewDidLayoutSubViews.

调用它