上一章當中,我們留了一個小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以上的話就需要使用其他方法來達到相應的效果了。
具體的就靠大家自己參照代碼理解了。
最后再附上一張效果圖