有没有办法设置UIActivityIndicatorView
的活动指标(可能是UIRefreshControl
)的颜色?
我能够设置'橡胶'的颜色和指标:
[_refreshControl setTintColor:[UIColor colorWithRed:0.0f/255.0f green:55.0f/255.0f blue:152.0f/255.0f alpha:1.0]];
但我希望将'橡胶'蓝色和活动指示器设为白色,这可能吗?
答案 0 :(得分:3)
这不是官方支持的,但如果您想冒未来的iOS更改破坏代码的风险,可以试试这个:
建立了ayoy的答案,我构建了一个UIRefreshControl的子类,它在beginRefresing
中设置ActivityIndicator的颜色。这应该是一个更好的地方,因为你可以在代码而不是用户中调用它来导致动画开始。
@implementation WhiteRefreshControl : UIRefreshControl
- (void)beginRefreshing
{
[super beginRefreshing];
NSArray *subviews = [[[self subviews] lastObject] subviews];
//Range check on subviews
if (subviews.count > 1)
{
id spinner = [subviews objectAtIndex:1];
//Class check on activity indicator
if ([spinner isKindOfClass:[UIActivityIndicatorView class]])
{
UIActivityIndicatorView *spinnerActivity = (UIActivityIndicatorView*)spinner;
spinnerActivity.activityIndicatorViewStyle = UIActivityIndicatorViewStyleWhite;
}
}
}
答案 1 :(得分:2)
嗯,你在技术上可以做到,但它不受支持。你最好遵循Dave的建议,或者如果你坚持的话继续阅读。
如果你调查UIRefreshControl
的子视图,结果证明它包含一个类_UIRefreshControlDefaultContentView
的子视图。
如果您在刷新状态下检查该内容视图的子视图,则它包含以下内容:
UILabel
UIActivityIndicatorView
UIImageView
UIImageView
在您回调UIControlEventValueChanged
事件时技术上,您可以执行以下操作:
UIActivityIndicatorView *spinner = [[[[self.refreshControl subviews] lastObject] subviews] objectAtIndex:1];
spinner.activityIndicatorViewStyle = UIActivityIndicatorViewStyleWhite;
那会有用。它也不违反App Review Guidelines,因为它不使用私有API(浏览视图的子视图并使用公共API使用它们是合法的)。
但请记住,UIRefreshControl
的内部实现可以随时更改,并且您的代码可能无法正常运行,甚至在以后的iOS版本中崩溃。
答案 2 :(得分:1)
不,那是不可能的。您需要提交an enhancement request来要求Apple实施此操作。