UIPageControl 点边框颜色

Avi*_*mar 1 objective-c ios

我无法在 iOS 14 中设置页面控件点的边框颜色。以下代码适用于 iOS < 14,但不适用于 iOS 14:

for (int i = 0; i < [self.subViews count]; i++) {
    UIView *dot = [self.subViews objectAtIndex:i];
    dot.layer.borderWidth = 1;
    dot.layer.borderColor = [UIColor blueColor].CGColor;
}
Run Code Online (Sandbox Code Playgroud)

UIPageControl 色调颜色清晰。我只想添加边框。在 Obj-C 中需要一个解决方案。

zrz*_*zka 5

注释

  • iOS 14 仍然是测试版,任何基于视图层次结构的解决方案都可以停止使用下一个测试版。
  • 它也可以在任何未来的 iOS 版本(非测试版)中停止工作。
  • 您依赖于私有视图层次结构。Apple 可以随时更改它,恕不另行通知。IOW 它属于私有 API 使用类别 = 你在这里是自己的。

UIPageControl 视图层次结构

iOS 13

在此处输入图片说明

iOS 14

在此处输入图片说明

新API

即使您更新代码以匹配新的视图层次结构......

UIView *pageControlContentView = self.pageControl.subviews[0];
UIView *pageControlIndicatorContentView = pageControlContentView.subviews[0];
[pageControlIndicatorContentView.subviews enumerateObjectsUsingBlock:^(__kindof UIView * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
    obj.layer.borderWidth = 1;
    obj.layer.borderColor = UIColor.blueColor.CGColor;
}];
Run Code Online (Sandbox Code Playgroud)

......你会得到这样的东西:

在此处输入图片说明

iOS 14 引入了您可以使用的新属性和方法:

例如,您可以使用 SF 符号:

UIImage *image = [UIImage systemImageNamed:@"link.circle.fill"];
self.pageControl.preferredIndicatorImage = image;
Run Code Online (Sandbox Code Playgroud)

然后你会得到:

在此处输入图片说明

换句话说,为了安全起见,避免私有视图层次结构,使用preferredIndicatorImage. 如果您想自定义图像等,您可以准备自己的图像。但这是另一个问题的主题。如果您想以编程方式执行此操作,请搜索此类问题。

由于您使用的是私有视图层次结构,因此请学习您的工具 (Xcode) 并从检查视图层次结构调试视图层次结构章节开始。下次您将能够找到自己的问题所在。