Ios UIImageview上的cGradent层在iphone 6s plus中向上移动,同时在iphone 5中正确设置

Ios UIImageview上的cGradent层在iphone 6s plus中向上移动,同时在iphone 5中正确设置,ios,objective-c,uiimageview,uikit,cagradientlayer,Ios,Objective C,Uiimageview,Uikit,Cagradientlayer,在我的viewDidLoad中,我正在调用方法: [self applyGradientOnDogImageView]; -(void)applyGradientOnDogImageView{ CAGradientLayer *gradient = [CAGradientLayer layer]; gradient.frame = CGRectMake(self.dogImageView.bounds.origin.x, self.dogImageView.bounds.origin.y+

在我的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 6s plus中,获得以下输出:


如何解决iphone 6s plus中渐变向上移动的问题?

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

创建图层后,图像将调整大小,但图层未调整大小。解决这个问题的最简单方法是创建一个包含层的UIView子类。然后,您可以响应大小更改并在viewDidLoad中调整图层的大小。如果视图尚未调整到特定设备的大小,请加载视图。因此,渐变的框架将是错误的

您应该调用依赖于
视图中布局是否正确的代码,并在
viewdilayoutsubviews
方法中调整它们


因此,与其从viewDidLoad调用applyGradient方法,不如从ViewWillAppeard调用它,还可以编写更新层框架的代码,并在viewDidLoad中从viewDidLayoutSubViews调用它。视图的大小尚未调整到特定的设备。因此,渐变的框架将是错误的

您应该调用依赖于
视图中布局是否正确的代码,并在
viewdilayoutsubviews
方法中调整它们


因此,与其从viewDidLoad调用applyGradient方法,不如从
视图调用它,并编写更新层框架的代码,然后从
viewDidLayoutSubViews调用它(这是一只看起来很滑稽的狗!)@邓肯,名字叫泰格;)是否对imageview使用自动布局?您正在显示的函数何时调用?@Maurice:yes imageview是使用自动布局设置的。[self-ApplyGradinToGimageView]在viewDidLoad中调用。外观异常的老虎。这是一只看起来很滑稽的狗!:)@邓肯,名字叫泰格;)是否对imageview使用自动布局?您正在显示的函数何时调用?@Maurice:yes imageview是使用自动布局设置的。[self-ApplyGradinToGimageView]在viewDidLoad中调用。外观也不寻常。类似于此问题:类似于此问题:谢谢,这对我有用。@Jerry提供的链接也很有用。所以我的最终解决方案是邓肯和杰瑞的方案的混合。谢谢,这对我很有效。@Jerry提供的链接也很有用。所以我的最终解决方案是邓肯和杰瑞的解决方案的混合。