ios开发——UITextView展示txt电子书时的页数调整

本文介绍了在iOS开发中,使用UITextView展示电子书时遇到的页数调整问题。由于iOS7更新,无法直接通过contentSize获取高度,需用NSString的boundingRectWithSize方法。文中探讨了简单的页数计算方法导致的页数“缺失”问题,并提出了一种有效的分页解决方案,确保每页字符数均匀且避免最后一页缺失。
摘要由CSDN通过智能技术生成

前言:

最近在写电子书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 * 
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值