有没有办法设置 a 的活动指示器(可能UIActivityIndicatorView
)的颜色UIRefreshControl
?
我能够设置“橡胶”和指示器的颜色:
[_refreshControl setTintColor:[UIColor colorWithRed:0.0f/255.0f green:55.0f/255.0f blue:152.0f/255.0f alpha:1.0]];
但是我想要'橡胶'蓝色和白色活动指示器,这可能吗?
有没有办法设置 a 的活动指示器(可能UIActivityIndicatorView
)的颜色UIRefreshControl
?
我能够设置“橡胶”和指示器的颜色:
[_refreshControl setTintColor:[UIColor colorWithRed:0.0f/255.0f green:55.0f/255.0f blue:152.0f/255.0f alpha:1.0]];
但是我想要'橡胶'蓝色和白色活动指示器,这可能吗?
这不是官方支持的,但如果你想冒险将来的 iOS 更改会破坏你的代码,你可以试试这个:
根据 ayoy 的回答,我构建了 UIRefreshControl 的子类,它将 ActivityIndicator 的颜色设置为beginRefresing
. 这应该是一个更好的放置位置,因为您可以在代码中调用它,而不是用户导致动画开始。
@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;
}
}
}
好吧,你在技术上可以做到,但它不受支持。你最好听从戴夫的建议,或者如果你坚持的话,请继续阅读。
如果您调查它的子视图,UIRefreshControl
结果会发现它包含一个子视图,属于_UIRefreshControlDefaultContentView
.
如果您随后检查处于刷新状态的内容视图的子视图,它包含以下内容:
UILabel
UIActivityIndicatorView
UIImageView
UIImageView
因此,从技术上讲,在您对事件的回调中,UIControlEventValueChanged
您可以执行以下操作:
UIActivityIndicatorView *spinner = [[[[self.refreshControl subviews] lastObject] subviews] objectAtIndex:1];
spinner.activityIndicatorViewStyle = UIActivityIndicatorViewStyleWhite;
那会奏效的。它也不违反应用审查指南,因为它不使用私有 API(浏览视图的子视图并使用公共 API 使用它们是合法的)。但请记住,内部实现UIRefreshControl
可以随时更改,您的代码可能无法在更高版本的 iOS 中运行甚至崩溃。
不,那是不可能的。您需要提交增强请求以要求 Apple 实施此功能。