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;
floatfPadding =
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以上的话就需要使用其他方法来达到相应的效果了。
具体的就靠大家自己参照代码理解了。
最后再附上一张效果图