IOS开发---菜鸟学习之路--(十一)-使新闻内容自适应高度_移动开发_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > 移动开发 > IOS开发---菜鸟学习之路--(十一)-使新闻内容自适应高度

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

 2013/12/23 3:09:09  请输入中文名  博客园  我要评论(0)
  • 摘要:上一章当中,我们留了一个小BUG。其实就是浏览新闻的时候,如果文字内容过长的花,UITextView会有个下拉框,而最底层的UIScrollView也有个下拉框,那么在使用的时候就会非常的不爽。而这章呢我们就要解决这样一个问题了其实并不是很复杂的修改方法我们只需要将viewDidLoad改成下面这样就可以了-(void)viewDidLoad{GetWebInfo*getwebinfo=[GetWebInfoalloc]
  • 标签:学习 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以上的话就需要使用其他方法来达到相应的效果了。

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

最后再附上一张效果图

发表评论
用户名: 匿名