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

Posted

技术标签:

【中文标题】UIImageview 上的渐变层在 iphone 6s 中向上移动,同时在 iphone 5 中正确设置【英文标题】:CAGradient layer on UIImageview moving upwards in iphone 6s plus while setting correctly in iphone 5 【发布时间】:2016-12-07 13:44:05 【问题描述】:

在我的 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中渐变向上移动的问题?

【问题讨论】:

那是一只长相很滑稽的狗! :) @Duncan,名字叫 Tiger ;) 您是否在图像视图中使用自动布局?您显示的函数何时调用? @ Maurice:是的,imageview 是使用自动布局设置的。 [self applyGradientOnDogImageView] 在 vi​​ewDidLoad 中被调用。 还有不寻常的老虎。 【参考方案1】:

在 viewDidLoad 中,视图的大小尚未适合特定设备。因此,您的渐变框架将是错误的。

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

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

【讨论】:

谢谢,这对我有用。 @Jerry 提供的链接也很有帮助。所以我的最终解决方案是混合了 Duncan 和 Jerry 的解决方案。【参考方案2】:

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

【讨论】:

类似这个问题:***.com/questions/29111099/…

以上是关于UIImageview 上的渐变层在 iphone 6s 中向上移动,同时在 iphone 5 中正确设置的主要内容,如果未能解决你的问题,请参考以下文章

如何在 UIImageView iOS 上设置阴影渐变图像

渐变层在 Xib 文件中的纵向模式下不起作用

渐变层在视图中不可见

在 UIImageView 上应用 CAGradient 层在上边缘和左边缘

iPhone上的UIView和UILabels上的渐变[重复]

iPhone 6和iPhone 6 Plus上的UIImageView高度缩放显示模式