Noé*_*ieu 74 iphone user-interface xcode objective-c ios7
我正在尝试在我的UIRefreshControl上设置tintColor(在iOS 7上构建).我在storyboard中为tableViewController启用了刷新,然后在我的ViewController viewDidLoad
方法中,我执行了以下操作:
[self.refreshControl setTintColor:[UIColor redColor]];
Run Code Online (Sandbox Code Playgroud)
所以现在,当我拉动刷新时,刷新控件的颜色确实是红色的:
我希望我的视图在出现时自动更新,所以我做了:
- (void)viewDidAppear:(BOOL)animated{
[self.refreshControl beginRefreshing];
}
Run Code Online (Sandbox Code Playgroud)
根据/sf/answers/1137547561/,它没有显示纺车,我添加了
[self.tableView setContentOffset:CGPointMake(0, -self.refreshControl.frame.size.height) animated:NO];
Run Code Online (Sandbox Code Playgroud)
强迫表现出来.它显示了它,但现在又回到了默认颜色:
如果我之后尝试手动拉动以刷新,则为红色.
我尝试在iOS6上构建它并且它可以正常工作,这是一个iOS7错误吗?
PS:这不是模拟器的问题,我尝试在设备上构建它,同样的bug.
PPS:我构建了一个示例项目,你能告诉我你是否有相同的bug或我的代码中是否有问题?这是链接:http://d.pr/f/pGrV
非常感谢 !
Wil*_*rge 53
嘿,他偶然发现了这个问题.
有趣的是,我通过首先设置contentOffset然后调用beginRefreshing来修复我的代码
if(self.tableView.contentOffset.y == 0){
self.tableView.contentOffset = CGPointMake(0, -self.refreshControl.frame.size.height);
[self.refreshControl beginRefreshing];
}
Run Code Online (Sandbox Code Playgroud)
您可能想要为此过程设置动画:
[UIView animateWithDuration:0.25 delay:0 options:UIViewAnimationOptionBeginFromCurrentState animations:^(void){
self.tableView.contentOffset = CGPointMake(0, -self.refreshControl.frame.size.height);
} completion:^(BOOL finished) {
[self.refreshControl beginRefreshing];
}];
Run Code Online (Sandbox Code Playgroud)
希望这对你有所帮助.
w ^
Fox*_*150 24
SWIFT解决方案!在以下代码中插入以下代码viewDidLoad
:
self.refreshControl.tintColor = UIColor.orangeColor()
self.tableView.contentOffset = CGPointMake(0, -self.refreshControl.frame.size.height)
self.refreshControl.beginRefreshing()
Run Code Online (Sandbox Code Playgroud)
Swift 3.1
self.refreshControl.tintColor = UIColor.orange
self.tableView.contentOffset = CGPoint(x:0, y:-self.refreshControl.frame.size.height)
self.refreshControl.beginRefreshing()
Run Code Online (Sandbox Code Playgroud)
@ william-george的答案让我朝着正确的方向前进,但却给了我奇怪的自动布局动画问题.
所以这是适合我的版本:
- (void)programaticallyRefresh {
// Hack necessary to keep UIRefreshControl's tintColor
[self.scrollView setContentOffset:CGPointMake(0, -1.0f) animated:NO];
[self.scrollView setContentOffset:CGPointMake(0, -self.refreshControl.frame.size.height) animated:YES];
[self.refreshControl beginRefreshing];
[self refresh];
}
Run Code Online (Sandbox Code Playgroud)
-refresh
是与之相关的方法UIRefreshControl
.
小智 7
为 UIResfreshControl 添加扩展。
extension UIRefreshControl {
func beginRefreshingManually() {
self.tintColor = UIColor.white
if let scrollView = superview as? UIScrollView {
scrollView.setContentOffset(CGPoint(x: 0, y:scrollView.contentOffset.y - frame.height), animated: false)
}
beginRefreshing()
}
}
Run Code Online (Sandbox Code Playgroud)
Tre*_*ree -2
强制 setTintColor 在主线程中运行。(主线程更新用户界面)。
[[NSOperationQueue mainQueue] addOperationWithBlock:^ {
[self.refreshControl setTintColor:[UIColor redColor]];
[self.refreshControl beginRefreshing];
}];
Run Code Online (Sandbox Code Playgroud)