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以上的話就需要使用其他方法來達到相應的效果了。

具體的就靠大家自己參照代碼理解了。

最后再附上一張效果圖


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM