ios开发-下拉刷新一个莫名其妙的错误
昨天在应用中加入下拉刷新功能的时候,莫名奇妙出现了这样一个错误。
如图所示,
1.下拉刷新视图没有显示设置的背景色
2.文字说明不在中央。
这下我费解了,我利用的是第三方类库EGORefreshTableHeaderView。 之前一直用的好好的,不过这次却突然出现这样的错误。百思不得其解阿。
折腾了好久,也没找到确切的原因。只能用一些巧法解决。
姑且先纪录下,没准以后能找到原因。当然,如果哪位大神看了我的博客,知道原因,跪求解答。
下面说下我的解决方法吧。
1.下拉刷新视图没有显示设置的背景色
在EGORefreshTableHeaderView.m文件中,有这样的语句。- (id)initWithFrame:(CGRect)frame arrowImageName:(NSString *)arrow textColor:(UIColor *)textColor {
if((self = [superinitWithFrame:frame])) {
self.autoresizingMask =UIViewAutoresizingFlexibleWidth;
self.backgroundColor = [UIColorcolorWithRed:226.0/255.0green:231.0/255.0blue:237.0/255.0alpha:1.0];
绿色底纹的为设置下拉刷新背景色的代码。
可是貌似没什么用,显示的还是默认的白色。后来我想到了一种可能,按理说,这样的设置方法没问题的,会不会是视图的位置放的不对?
就这种猜测,我试着打印了下frame的大小。
NSLog(@"%f",self.bounds.size.height);
打印结果出乎我的意料,居然是0.0000f
这下闹糊涂了。在使用下拉刷新的位置,代码是这样的。
if (_refreshHeaderView ==nil) {
EGORefreshTableHeaderView *view = [[EGORefreshTableHeaderViewalloc] initWithFrame:CGRectMake(0.0f,0.0f - self.testTableView.bounds.size.height,self.view.frame.size.width,self.testTableView.bounds.size.height)];
view.delegate =self;
[self.testTableViewaddSubview:view];
_refreshHeaderView = view;
}
很显然,初始化的时候传进去了阿。那到底是为什么?我又试着打印了下self.testTableView.bounds.size.height。 结果也是0.可能问题就出在这里吧。 不过.. 能力有限,到现在还不知道到底错在哪。
于是乎,用取巧的办法,我在之前成功使用下拉刷新的位置,打印出了self.testTableView.bounds.size.height的大小。 结果是377.0000f。
然后我直接把这个定值传入,取代self.testTableView.bounds.size.height。
结果发现..真的没问题了。
2.文字说明不在中央。
解决第一个问题后.. 我也不再多想了,应该还是我不知道的错误吧。下面直接说下我的取巧方法。UILabel *label = [[UILabelalloc] initWithFrame:CGRectMake(0.0f, frame.size.height - 30.0f,self.frame.size.width,20.0f)];
label.autoresizingMask =UIViewAutoresizingFlexibleWidth;
label.font = [UIFontsystemFontOfSize:12.0f];
label.textColor = textColor;
label.shadowColor = [UIColorcolorWithWhite:0.9falpha:1.0f];
label.shadowOffset =CGSizeMake(0.0f,1.0f);
label.backgroundColor = [UIColorclearColor];
label.textAlignment =NSTextAlignmentCenter;
[selfaddSubview:label];
_lastUpdatedLabel=label;
[labelrelease];
这是对应的label代码。 其中初始化的时候,UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0.0f, frame.size.height - 30.0f, self.frame.size.width,20.0f)];设置了x的坐标为0.0f。 现在是太靠右了。 于是我把x改为了-150.0f。让它靠左一点。修改后代码如下UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(-150.0f, frame.size.height - 30.0f, self.frame.size.width,20.0f)];
结果证明.. 这样是可以的。看下改后的效果

就这样,解决了我不知道是什么原因错误的两个问题。 先标记下, 希望以后有能力能找出问题。 也希望大神给我支支招。
下面说明个,那个文字说明部分,如果要修改。比如我把loading...改成了玩命刷新中。可在
- (void)setState:(EGOPullRefreshState)aState
这函数中找到相应的替换就可以。