IOS开发---菜鸟学习之路--(十一)-使新闻内容自适应高度
上一章当中,我们留了一个小BUG。
其实就是浏览新闻的时候,如果文字内容过长的花,UITextView 会有个下拉框,而最底层的UIScrollView也有个下拉框,那么在使用的时候就会非常的不爽。
而这章呢我们就要解决这样一个问题了
其实并不是很复杂的修改方法
我们只需要将viewDidLoad改成下面这样就可以了
- (void)viewDidLoad { GetWebInfo *getwebinfo=[GetWebInfo alloc]; NSString *myparameters=[[NSString alloc] initWithString:[NSString stringWithFormat:@"Method=getSingleNewsbyId&new_id=%@",mynewid]]; getwebinfo.parameters=myparameters; NSString *webReturnMessage=[getwebinfo dogetWebInfo]; NSData* jsonData=[webReturnMessage dataUsingEncoding:NSUTF8StringEncoding]; NSArray *keys = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:nil]; // NSLog(@"%@",keys); timelabel.text=[[keys objectAtIndex:0]valueForKey:@"time"]; titlelabel.text=[[keys objectAtIndex:0 ]valueForKey:@"title"]; contenttextview.text=[[keys objectAtIndex:0 ]valueForKey:@"contents"]; NSInteger i=0; if(haveimage) { images=[[[keys objectAtIndex:0 ]valueForKey:@"images"] componentsSeparatedByString:@","]; for (NSString *singleimage in images) { NSData *newimage=[Base64AndImageHelp mydataWithBase64EncodedString:singleimage]; UIImage *newjiaban=[[UIImage alloc] initWithData:newimage]; UIImageView *imageView = [[UIImageView alloc] init]; [self.mainscrollview addSubview:imageView]; imageView.frame = CGRectMake(20 ,170*i+100,280,150);//left ,top ,width ,height imageView.image=newjiaban; i++; } } if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) { NSInteger newSizeH; float fPadding = 16.0; // 8.0px x 2 CGSize constraint = CGSizeMake(contenttextview.contentSize.width - fPadding, CGFLOAT_MAX); CGSize size = [contenttextview.text sizeWithFont: contenttextview.font constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap]; newSizeH = size.height + 16.0 - 6; contenttextview.frame=CGRectMake(20 ,170*i+100,280,newSizeH); mainscrollview.contentSize=CGSizeMake(280, 100+170*i+newSizeH); } else { CGSize size = [[contenttextview text] sizeWithFont:[contenttextview font]]; int length = size.height; // 2. 取出文字的高度 int colomNumber = contenttextview.contentSize.height/length; //3. 计算行数 contenttextview.frame=CGRectMake(20 ,170*i+100,280,colomNumber*22); mainscrollview.contentSize=CGSizeMake(280, 100+170*i+colomNumber*22); } [super viewDidLoad]; // Do any additional setup after loading the view from its nib. }
首先我们需要判断一下设备的系统版本。
为什么需要判断设备的系统版本呢?
这是因为在IOS7当中UITextView已经不支持contentSize属性了。(也并不是不支持,而是超过长度的话获取过来的结果是相同的。)
接下来我来解释下 修改的部分
首先先判断设备版本
如果是IOS7以下的话呢就先获取TextView的字体样式。
然后再取出字体的高度
最后利用contentSize的高来除以行数。最后再修改下样式就可以了
而对于IOS7以上的话就需要使用其他方法来达到相应的效果了。
具体的就靠大家自己参照代码理解了。
最后再附上一张效果图
分类:
IOS
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?