计算内容的文字的size

来源:互联网 发布:情义知多少 编辑:程序博客网 时间:2024/03/28 17:44

//根据换行方式和字体的大小,以及计算范围来确定字符串的size
- (
CGSize)currentSize{
   
CGFloat version = [[UIDevicecurrentDevice].systemVersionfloatValue];
   
//计算size  7之后有新的方法
   
CGSize size;
   
if(version>=7.0) {
       
//得到一个设置字体属性的字典
       
NSDictionary *dic = [NSDictionarydictionaryWithObjectsAndKeys:[UIFontsystemFontOfSize:15],NSFontAttributeName,nil];
       
//optinos 前两个参数是匹配换行方式去计算,最后一个参数是匹配字体去计算
       
//attributes 传入使用的字体
       
//boundingRectWithSize 计算的范围
       
//_tweetBodystring
        size = [
_tweetBodyboundingRectWithSize:CGSizeMake(215,999)options:NSStringDrawingTruncatesLastVisibleLine|NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeadingattributes:diccontext:nil].size;
       
    }
else{
       
//ios7以前
       
//根据字号和限定范围还有换行方式计算字符串的size
       
//label中的fontlinebreak要与此一致
       
//CGSizeMuibuttke(215,999) 横向最大计算到215纵向max 999
        size = [
_tweetBodysizeWithFont:[UIFontsystemFontOfSize:15]constrainedToSize:CGSizeMake(215,999)lineBreakMode:NSLineBreakByCharWrapping];
    }
   
returnsize;
}

/***********************************/
#import"RootViewController.h"
#import
"TweetCell.h"
#import
"TweetModel.h"
#import
"UIImageView+WebCache.h"
#import
"GDataXMLNode.h"

@interfaceRootViewController()
{
   
NSMutableArray *_dataArray;
}
@end

@implementationRootViewController
#define kUrlString @"http://www.oschina.net/action/api/tweet_list?uid=0&pageIndex=2&pageSize=20"

- (
id)initWithStyle:(UITableViewStyle)style
{
   
self= [superinitWithStyle:style];
   
if(self) {
       
// Custom initialization
    }
   
returnself;
}

- (
void)viewDidLoad
{
    [
superviewDidLoad];
   
_dataArray = [[NSMutableArrayalloc]init];
    [
selfloadDataWithUrlString:kUrlString];
}

- (
void)loadDataWithUrlString:(NSString*)urlString{
   
ASIHTTPRequest *request = [ASIHTTPRequestrequestWithURL:[NSURLURLWithString:urlString]];
    request.
delegate= self;
    [request
startAsynchronous];
}
#pragma mark - asi delegate
- (void)requestFinished:(ASIHTTPRequest*)request{
   
if(request.responseData) {
       
GDataXMLDocument *doc = [[GDataXMLDocumentalloc]initWithData:request.responseDataencoding:NSUTF8StringEncodingerror:nil];
       
NSArray *array = [docnodesForXPath:@"//tweet"error:nil];
       
for (GDataXMLElement*tweet in array) {
           
TweetModel *model = [[TweetModelalloc]init];
            model.
tweetAuthor= [selfgetValueWithElement:tweetchildName:@"author"];//调用函数
            model.
tweetHeadImageStr= [selfgetValueWithElement:tweetchildName:@"portrait"];//调用函数
            model.
tweetCommentCount= [selfgetValueWithElement:tweetchildName:@"commentCount"];//调用函数
            model.
tweetBody= [selfgetValueWithElement:tweetchildName:@"body"];//调用函数
            model.
tweetImageString= [selfgetValueWithElement:tweetchildName:@"imgSmall"];//调用函数
            model.
tweetTime  =[selfgetValueWithElement:tweetchildName:@"pubDate"];//调用函数
            [
_dataArrayaddObject:model];
        }
        [
self.tableViewreloadData];
    }
}

- (
void)requestFailed:(ASIHTTPRequest*)request{
   
NSLog(@"error:%@",request.error.localizedDescription);
}
- (
NSString*)getValueWithElement:(GDataXMLElement*)element childName:(NSString*)name{
   
NSArray *array = [elementelementsForName:name];
   
GDataXMLElement *child = [arrayobjectAtIndex:0];
   
returnchild.stringValue;
}



- (
void)didReceiveMemoryWarning
{
    [
superdidReceiveMemoryWarning];
   
// Dispose of any resources that can be recreated.
}
//要依据cell中各个控件的frame来计算每一行所需要的高度
- (
CGFloat)tableView:(UITableView*)tableView heightForRowAtIndexPath:(NSIndexPath*)indexPath{
   
TweetModel *model = [_dataArrayobjectAtIndex:indexPath.row];
   
CGSize size = [modelcurrentSize];
   
if(model.tweetImageString.length== 0) {
       
return 35+size.height+ 10 + 18 + 10;
    }
else
    {
       
return 35+size.height+ 10 +55+ 10 + 18 + 10;
    }
}

#pragma mark - Table view data source

- (
NSInteger)numberOfSectionsInTableView:(UITableView*)tableView
{
//#warning Potentially incomplete method implementation.
   
// Return the number of sections.
   
return1;
}

- (
NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section
{
//#warning Incomplete method implementation.
   
// Return the number of rows in the section.
   
return_dataArray.count;
}

- (
UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath
{
   
staticNSString*CellIdentifier = @"tweet";
   
TweetCell *cell = [tableViewdequeueReusableCellWithIdentifier:CellIdentifier];
   
if(cell == nil) {
        cell  =[[[
NSBundlemainBundle]loadNibNamed:@"TweetCell"owner:selfoptions:nil]lastObject];
    }
   
TweetModel *model = [_dataArrayobjectAtIndex:indexPath.row];
    cell.
tweetBodyLabel.font= [UIFontsystemFontOfSize:15];
    cell.
tweetBodyLabel.numberOfLines= 0;
    cell.
tweetBodyLabel.lineBreakMode= NSLineBreakByCharWrapping;
    cell.
tweetBodyLabel.text= model.tweetBody;
   
CGSize size = [modelcurrentSize];
   
if(model.tweetHeadImageStr.length== 0) {
       
//没有微博图片
        cell.
tweetHeadImageView.hidden= YES;
        cell.
tweetBodyLabel.frame= CGRectMake(76,35, size.width, size.height);
        cell.
tweetTimeLabel.frame CGRectMake(76,35+size.height+10,184,18);
       
    }
else
    {
      
//有微博图片
        cell.
tweetHeadImageView.hidden= NO;
        cell.
tweetBodyLabel.frame= CGRectMake(76,35, size.width, size.height);
        cell.
tweetTimeLabel.frame CGRectMake(76,35+size.height+10,140,55);
        cell.
tweetTimeLabel.frame= CGRectMake(76, cell.tweetImageView.frame.origin.y+55+10,184,18);
       
//为微博图片赋值
        [cell.
tweetImageViewsetImageWithURL:[NSURLURLWithString:model.tweetImageString]];
    }
    cell.
tweetAuthorLabel.text= model.tweetAuthor;
    [cell.
tweetHeadImageViewsetImageWithURL:[NSURLURLWithString:model.tweetHeadImageStr]];
    cell.
tweetTimeLabel.text= model.tweetTime;
   
   
returncell;
}
0 0