如何根据文本长度动态地更改textview高度和单元格高度,而不需要滚动 [英] how to dynamically change the textview height and cell height according to the text length without the scroll

查看:170
本文介绍了如何根据文本长度动态地更改textview高度和单元格高度,而不需要滚动的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我的表格中显示数据的代码,我的完整数据没有显示在单元格中。
第一个图像是当我设置滚动到不,第二个图像,当我不设置scrollable.i我是一个beginner.plz帮助我从这个。

this is my code that shows data in table,my complete data is not showing in cell. 1st image is when i set scrollable to no ,2nd image when i do not set scrollable.i am a beginner.plz help me out of this.

- (void)textViewDidChange:(UITextView *)textView{
[table beginUpdates];
[table  endUpdates];
}

-(void)createdatabase{

BOOL success;

NSFileManager *filemanager = [NSFileManager defaultManager];

success = [filemanager fileExistsAtPath:datapath];

if (success)return;

NSString *databasefromapp = [[[NSBundle mainBundle] resourcePath]stringByAppendingPathComponent:dataname];

[filemanager copyItemAtPath:databasefromapp toPath:datapath error:nil];

}

-(void)getdatabase{

eventitleary = [[NSMutableArray alloc]init];
eventdescary = [[NSMutableArray alloc]init];
eventimgary = [[NSMutableArray alloc] init];

sqlite3 *dataname1;

if (sqlite3_open([datapath UTF8String],&dataname1) == SQLITE_OK) {

    const char *sqlStatement;

    sqlStatement = "SELECT * FROM photography_events";


    sqlite3_stmt *compiledStatement;

    if(sqlite3_prepare_v2(dataname1, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK)
    {
        // Loop through the results and add them to the feeds array

        while(sqlite3_step(compiledStatement) == SQLITE_ROW)
        {
            // Read the data from the result row

            NSString *str_title = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 1)];

            [eventitleary addObject:str_title];

            NSString *str_desc = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 3)];

            [eventdescary addObject:str_desc];

            NSData *data = [[NSData alloc] initWithBytes:sqlite3_column_blob(compiledStatement, 2) length:sqlite3_column_bytes(compiledStatement, 2)];
            [eventimgary addObject:data];

        }

    }
}

NSLog(@"%@", eventitleary);
}


- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
 }

 -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{

return 1;

 }
 -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{

return eventitleary.count;
 }

 -(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

NSString *cellidenti = @"CellIdenti";

TableViewCell2 *cell = (TableViewCell2*)[tableView dequeueReusableCellWithIdentifier:cellidenti];

if (cell == nil) {
    NSArray *nib = [[NSBundle mainBundle]loadNibNamed:@"TableViewCell2" owner:self options:nil];
    cell = [nib objectAtIndex:0];
}
cell.eventitlelbl.text = [eventitleary objectAtIndex:indexPath.row];

cell.eventdesc.text = [eventdescary objectAtIndex:indexPath.row];
cell.eventdesc.editable = NO;
//cell.eventdesc.scrollEnabled = NO;
[cell.eventdesc sizeToFit];

frame = cell.eventdesc.frame;

frame.size = cell.eventdesc.contentSize;

cell.eventdesc.frame = frame;

NSData *dataimg = (NSData*)[eventimgary objectAtIndex:indexPath.row];

cell.eventimg.image = [UIImage imageWithData:dataimg];

return cell;
}

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{

// Return the height with a bit of additional padding space
return frame.size.height + 300;
}


推荐答案

您可以通过自适应布局。 如果您正在使用autolayout,请检查这个令人敬畏的教程。否则,您可以通过计算文本的高度来设置动态tableView单元格高度。

You can achieve this by adaptive layout. Check this awesome tutorial if you are working with autolayout. Else you can set dynamic tableView cell height by calculating the height in which your text will fit.

您可以使用以下方法计算文本的高度。传递文本,所需的字体和宽度的文本视图。

You can calculate height of text by using below method. Pass text, required font and width of your textview.

-(CGFloat)heightForText:(NSString*)text withFont:(UIFont *)font andWidth:(CGFloat)width
{
   CGSize constrainedSize = CGSizeMake(width, MAXFLOAT);
   NSDictionary *attributesDictionary = [NSDictionary dictionaryWithObjectsAndKeys:font, NSFontAttributeName,nil];
   NSMutableAttributedString *string = [[NSMutableAttributedString alloc] initWithString:text attributes:attributesDictionary];
   CGRect requiredHeight = [string boundingRectWithSize:constrainedSize options:NSStringDrawingUsesLineFragmentOrigin context:nil];
   if (requiredHeight.size.width > width) {
    requiredHeight = CGRectMake(0,0,width, requiredHeight.size.height);
   }
   return requiredHeight.size.height;
}


-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
return [self heightForText:@"your text view text for this row" withFont:[UIFont fontWithName:@"Helvetica" size:16] andWidth:320];
}

这篇关于如何根据文本长度动态地更改textview高度和单元格高度,而不需要滚动的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆