Xamarin.iOS:Layer.InsertSublayer 在 iOS 14.1 中不工作,因为它以前是工作的
Xamarin.iOS:Layer.InsertSublayer is not working in iOS 14.1 as it was previously working
在我的应用程序中,我在某些情况下在单元格上添加渐变层。在 iOS 之前的版本中它工作正常,但在更新到 14.1 后它不再显示渐变。
以下是用于显示渐变的代码。
Layer.InsertSublayer(Utility.GetGradientLayer(Frame, GradientColor.Green), 0);
我已经在 iOS 11 模拟器上测试过,这段代码工作正常,但对于 iOS 14,它没有显示在单元格上。当我将索引从 0 更改为 1(如下所示)时,
Layer.InsertSublayer(Utility.GetGradientLayer(Frame, GradientColor.Green), 1);
渐变显示在 iOS 14 设备上,但在 iOS-11 设备上,渐变层显示在文本的起始位置,单元格的文本返回到该渐变层并不要未显示(请注意 Layer 是 CALayer 的对象)。
在这方面的任何帮助将不胜感激。谢谢
根据描述,您可以通过以下方式先解决是否属于iOS14设备:
if (UIDevice.CurrentDevice.CheckSystemVersion(14, 0))
{
Layer.InsertSublayer(Utility.GetGradientLayer(Frame, GradientColor.Green), 1);
}
else
{
Layer.InsertSublayer(Utility.GetGradientLayer(Frame, GradientColor.Green), 0);
}
关于原因,我猜测在iOS14设备中应该有不止一层子层,所以0
处的inset不能显示。
您也可以试试下面的方法是否可行:
if(Layer.Sublayers.Length > 1)
{
Layer.InsertSublayer(Utility.GetGradientLayer(Frame, GradientColor.Green), 1);
// or try this
Layer.InsertSublayerAbove(Utility.GetGradientLayer(Frame, GradientColor.Green), Layer.Sublayers[0]);
}
else
{
Layer.InsertSublayer(Utility.GetGradientLayer(Frame, GradientColor.Green), 0);
}
Junior Jiang pos提供了一个很好的解决方案,但我发现了另一个非常简单的 hack。无需更改代码,我们只需要使单元格的背景透明即可。因此,如果渐变是任意数量的层,它将直接显示。不需要 impose 任何 os 相关或层相关的检查。
如果其他人找到更好的解决方案,请告诉我们。问候
在我的应用程序中,我在某些情况下在单元格上添加渐变层。在 iOS 之前的版本中它工作正常,但在更新到 14.1 后它不再显示渐变。 以下是用于显示渐变的代码。
Layer.InsertSublayer(Utility.GetGradientLayer(Frame, GradientColor.Green), 0);
我已经在 iOS 11 模拟器上测试过,这段代码工作正常,但对于 iOS 14,它没有显示在单元格上。当我将索引从 0 更改为 1(如下所示)时,
Layer.InsertSublayer(Utility.GetGradientLayer(Frame, GradientColor.Green), 1);
渐变显示在 iOS 14 设备上,但在 iOS-11 设备上,渐变层显示在文本的起始位置,单元格的文本返回到该渐变层并不要未显示(请注意 Layer 是 CALayer 的对象)。 在这方面的任何帮助将不胜感激。谢谢
根据描述,您可以通过以下方式先解决是否属于iOS14设备:
if (UIDevice.CurrentDevice.CheckSystemVersion(14, 0))
{
Layer.InsertSublayer(Utility.GetGradientLayer(Frame, GradientColor.Green), 1);
}
else
{
Layer.InsertSublayer(Utility.GetGradientLayer(Frame, GradientColor.Green), 0);
}
关于原因,我猜测在iOS14设备中应该有不止一层子层,所以0
处的inset不能显示。
您也可以试试下面的方法是否可行:
if(Layer.Sublayers.Length > 1)
{
Layer.InsertSublayer(Utility.GetGradientLayer(Frame, GradientColor.Green), 1);
// or try this
Layer.InsertSublayerAbove(Utility.GetGradientLayer(Frame, GradientColor.Green), Layer.Sublayers[0]);
}
else
{
Layer.InsertSublayer(Utility.GetGradientLayer(Frame, GradientColor.Green), 0);
}
Junior Jiang pos提供了一个很好的解决方案,但我发现了另一个非常简单的 hack。无需更改代码,我们只需要使单元格的背景透明即可。因此,如果渐变是任意数量的层,它将直接显示。不需要 impose 任何 os 相关或层相关的检查。 如果其他人找到更好的解决方案,请告诉我们。问候