您的位置:首页 > 移动开发 > IOS开发

IOS开发---菜鸟学习之路--(十一)-使新闻内容自适应高度

2013-12-22 23:21 447 查看
上一章当中,我们留了一个小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以上的话就需要使用其他方法来达到相应的效果了。

具体的就靠大家自己参照代码理解了。

最后再附上一张效果图

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: