我尝试使用SVPullToRefresh的自定义视图,但我偶然发现了一些奇怪的问题。我制作了演示项目来说明问题:https://github.com/gaks/SVRefreshProblem
该项目只是一个带有TableView的UITableViewController和带有自定义刷新栏视图的xib文件。 SVPullToRefresh通过viewDidLoad中的IBOutlet添加到tableView:https://github.com/gaks/SVRefreshProblem/blob/master/SVRefreshProblem/DemoViewController.m
还有一个代码从xib文件加载RefreshBarView并将其设置为SVPullToRefresh的自定义视图(仅用于“加载”状态以用于说明):
RefreshBarView* refreshBarView = [[[NSBundle mainBundle] loadNibNamed:@"RefreshBarView" owner:self options:nil] objectAtIndex:0];
refreshBarView.bounds = CGRectMake(0, 0, 320, 60);
[[tableView pullToRefreshView] setCustomView:refreshBarView forState:SVPullToRefreshStateLoading];
问题在于,当您拉动表视图以触发刷新时,它会在[self layoutIfNeeded]
中调用- (void)setState:(SVPullToRefreshState)newState
后进入无限循环和全部可用内存状态。就我能够调试而言,它一直在调用- (void)layoutSubviews
。
打开xib文件时有点奇怪:https://github.com/gaks/SVRefreshProblem/blob/master/SVRefreshProblem/SVPullToRefresh/RefreshBarView.xib ...并从视图中删除标签 - 它工作得很好(除了你有一个空视图)。
我做错了什么?
答案 0 :(得分:0)
从nibs加载适用于ViewControllers,而不是适当的视图。您可以尝试以编程方式执行此操作:
UIView *v = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 60)];
[v setBackgroundColor:[UIColor grayColor]];
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 320, 60)];
[label setText:@"asdf"];
[v addSubview:label];
[[tableView pullToRefreshView] setCustomView:v forState:SVPullToRefreshStateLoading];
答案 1 :(得分:0)
尝试在笔尖中关闭“使用自动布局”。