前言:
最近在写电子书app的时候发现textView通过contentSize拿不到真实高度了,上网查过后才知道ios7更新了textView内部的初始化机制,需要通过NSString的
boundingRectWithSize:options:attributes:context:方法来获得textView内容的高度,也就是textView的真实高度。
可是问题是,我现在加入了一个功能:底部有一个slider。用户可以拖动slider来实现页数之间的跳动。
最初的页数实现思路非常简单:textView毕竟是scrollView的子类,拿到textView的contentOffset.y,除以用boundingRectWithSize:options:attributes:context:方法获得的rect的高度height,结果加1,记为currentPage。然后用currentPage去乘以textView的高度height,将该值设为新的contentOffset。说起来麻烦,直接上代码:
#pragma mark - Delegate
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
UITextView *textView = (UITextView *)scrollView;
//通过简单计算获得当前page
NSInteger page = (NSInteger)(textView.contentOffset.y / textView.height) + 1;
//调整page
if (page < 1 || page > self.allPages) {
return;
}
//保存page
self.currentPage = page;
[[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithInteger:page] forKey:kCurrentPage];
[[NSUserDefaults standardUserDefaults] synchronize];
//设置底部标签的值
self.pageLabel.text = [NSString stringWithFormat:@"%d / %d", self.currentPage, self.allPages];
//设置slider的值
[self.slider setValue:self.currentPage animated:YES];
}
以上是scrollview代理方法,其中有page的计算方法
NSInteger page = (NSInteger)sender.value;
[self.textView setContentOffset:CGPointMake(0, page *