更改 iOS 15 表格视图单元格中控件的重新排序控件的颜色



我在应用程序中使用tableview单元格Reorder控件,它在iOS 14之前运行良好,但在iOS 15上不起作用。在iOS 15中,重新排序控件的颜色不会更改。

以下是我使用的代码。那么我如何在iOS 15中更改重新排序控件的颜色呢。

private var myReorderImage : UIImage? = nil;
override func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
for subViewA in cell.subviews {
if (subViewA.classForCoder.description() == "UITableViewCellReorderControl") {
for subViewB in subViewA.subviews {
if (subViewB.isKind(of: UIImageView.classForCoder())) {
let imageView = subViewB as! UIImageView;
if (myReorderImage == nil) {
let myImage = imageView.image;
myReorderImage = myImage?.withRenderingMode(UIImageRenderingMode.alwaysTemplate);
}
imageView.image = myReorderImage;
imageView.tintColor = UIColor.red;
break;
}
}
break;
}
}
}

在iOS 15中,我尝试自定义Reorder控件的图标,但未能成功。所以我只是从Reorder控件中删除UIImageview对象。并以编程方式创建我自己的图像视图对象,并将图像设置为该图像视图。然后将该imageView作为addSubview添加到Reorder控件中。它解决了我的问题。

遵循共享代码,这样可以帮助其他面临相同问题的人。

private var myReorderImage : UIImage? = nil;
override func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
for subViewA in cell.subviews {
if (subViewA.classForCoder.description() == "UITableViewCellReorderControl") {
for subViewB in subViewA.subviews {
if (subViewB.isKind(of: UIImageView.classForCoder())) {
subViewB.removeFromSuperview()
let imageView = UIImageView()
if (self.myReorderImage == nil) {
let myImage = imageView.image
myReorderImage = myImage?.withRenderingMode(.alwaysTemplate)
}
var frame = imageView.frame
frame.origin.x = 3
frame.origin.y = 14
frame.size = CGSize(width: 21, height: 9)
self.myReorderImage = UIImage(named:"YourImage") // set your image 
imageView.frame = frame
imageView.image = self.myReorderImage
subViewA.addSubview(imageView) // add imageView to reorder control
break;
}
}
break;
}
}
}

这是基于前面的答案创建的目标代码解决方案,并进行了一些小的更改:

// Change cell reorder control tint color to white color (while on editing mode)
for (UIView *subViewA in self.subviews)
{
// Check if cell subview corresponds to cell rerorder control
if ([NSStringFromClass (subViewA.class) isEqualToString: @"UITableViewCellReorderControl"])
{
for (UIView *subViewB in subViewA.subviews)
{
// Check if cell reorder control subview corresponds to image view
if ([subViewB isKindOfClass: [UIImageView class]])
{
// Set reorderImage variable with current image view's image and rendering mode "always"
self.reorderImage = [[(UIImageView *) subViewB image] imageWithRenderingMode: UIImageRenderingModeAlwaysTemplate];

// Set new image view with current image view frame, reorder image variable, and white tint color
UIImageView *imageView = [[UIImageView alloc] init];
imageView.frame = subViewB.frame;
imageView.image = self.reorderImage;
imageView.tintColor = [UIColor whiteColor];

// Remove old image view from cell reorder control view hierarchy
[subViewB removeFromSuperview];

// Add new image view to cell reorder control view hierarchy
[subViewA addSubview: imageView];
break;
}
}
}
}

最新更新