2014-01-24 5 views
0

Вот мой код в cellForRowAtIndexPath делегата:UITextView встроенный в UITableViewCell не изменение размера правильно

Status *status = nil; 
status = [myArray objectAtIndex:indexPath.row]; 
NSString* postvalue = status.statusContent; 
cell.postContent.scrollEnabled = NO; 

CGSize mysize = [postvalue sizeWithAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:17.0f]}]; 
CGRect frame = cell.postContent.frame; 
frame.size.height = mysize.height; 
cell.postContent.frame = frame; 

cell.postContent.text = postvalue; 

Где cell.postContent является TextView

И вот мой код, который изменяет размер клетки:

-(CGFloat)tableView:(UITableView*)tableView heightForRowAtIndexPath:(NSIndexPath*)indexPath { 
    Status *status = nil; 
    status = [myArray objectAtIndex:indexPath.row]; 
    NSString* postvalue = status.statusContent; 

    return 100 + [self heightForText:postvalue]; 
} 


-(CGFloat)heightForText:(NSString *)text 
{ 
    NSInteger MAX_HEIGHT = 2000; 
    UITextView * textView = [[UITextView alloc] initWithFrame: CGRectMake(0, 0, 226, MAX_HEIGHT)]; 
    textView.text = text; 
    textView.font = [UIFont systemFontOfSize:17.0f];// your font 
    [textView sizeToFit]; 

    return textView.frame.size.height; 
} 

Это то, что это приводит к:

enter image description here

Я заменил имя пользователя высотой, вычисленной в делегате cellForRow .., чтобы вы могли видеть, что высота вычисляется правильно, и ячейка правильно изменяет размер, но текстовое изображение отсутствует - есть немало больше строк, чем вы не видите. Есть идеи?

Благодаря

+0

попробуйте установить кадр в самой подклассовой ячейке ... –

+0

У меня нет доступа к содержимому ячейки оттуда @Shan –

+0

Вы можете вернуть соответствующую высоту (высота вашего текстового вида + заполнение) в - (CGFloat) tableView : (UITableView *) tableView heightForRowAtIndexPath: (NSIndexPath *) indexPath. – jailani

ответ

0

Это потому, что вы не должны создавать новый TextField (который вы забыли добавить как подвид), но размер выхода ячейки. Попробуйте установить высоту textField в cellForRow, когда ячейка создана.

+0

Я делаю это уже ... CGSize MySize = [postvalue sizeWithAttributes: @ {NSFontAttributeName: [UIFont systemFontOfSize: 17.0f]}]; CGRect frame = cell.postContent.frame; frame.size.height = mysize.height; cell.postContent.frame = frame; cell.postContent - это выход –

0

UITextView принимает по умолчанию по умолчанию, поэтому это может быть проблемой. Установите contentInset из UITextView по коду.

// this is how we define setContentInset method 
[textView setContentInset:UIEdgeInsetsMake(CGFloat top, CGFloat left, CGFloat bottom, CGFloat right)]; 

// and you should do like this 
[textView setContentInset:UIEdgeInsetsMake(-8, -8, -8 ,-8)]; 
+0

На самом деле не помогло - в итоге: http://puu.sh/6welC.png –

0

и может получить доступ к его просматривать содержимое я думаю, вот код, я использую некоторые значения для тестирования она отлично работает, пройти через эту надежда помогает у ... :)

отключить автоматическое макет для TextField


в CustomCelll.h файле

@interface CustomCelll : UITableViewCell 
    //i think u hav an outlet for textview 
    @property (retain, nonatomic) IBOutlet UITextView *postContent; 
    @property (nonatomic,retain)NSString *message;//you get the message to set the height 

    in CustomCelll.m file 

    @implementation CustomCelll 
    @synthesize postContent; 
    @synthesize imageView; 
    - (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier 
    { 
     self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; 
     if (self) { 
     //heare i am adding the button 
     UIFont *font = [UIFont systemFontOfSize:17.0f]; 
     self.postContent.frame = CGRectZero;//initially set it zero 
     self.postContent.font = font; 
     } 
     return self; 

    } 

    - (void)layoutSubviews 
    { 
    [super layoutSubviews]; 
    CGSize size = [self findMessgeStringHeight];//you can ge the size 
    //set frame for ur label 
    self.postContent.frame = CGRectMake(103, 8, size.width + 10,size.height + 10);//set the height here(for your case) and disable auto layout 
    self.postContent.text = self.message;//set the message 
    } 

    - (CGSize)findMessgeStringHeight 
    { 

     NSAttributedString *attributedText = [[NSAttributedString alloc] initWithString:self.message attributes:@{ NSFontAttributeName:[UIFont systemFontOfSize:17.0f] }]; 
     CGRect rect = [attributedText boundingRectWithSize:(CGSize){225, MAXFLOAT} 
              options:NSStringDrawingUsesLineFragmentOrigin 
              context:nil]; 
     CGSize requiredSize = rect.size; 

     return requiredSize; //finally u return your height 
    } 


    //in your controller 

    -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
    { 
    CustomCelll *cell = [tableView dequeueReusableCellWithIdentifier:@"BDCustomCell"]; 
    if (cell == nil) { 
    NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"Empty" owner:self options:nil]; 
    cell = [topLevelObjects objectAtIndex:0]; 
    } 
    cell.message = @"hello, how are u, it been so long since we met, how's the weather there, here too cold, i am going to my mom's home may be i will stay there for 2 or 3 weeks"; 
    return cell; 
    } 

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

     NSString *str = @"hello, how are u, it been so long since we met, how's the weather there, here too cold, i am going to my mom's home may be i will stay there for 2 or 3 weeks";//use same sring to get the height 

    NSAttributedString *attributedText = [[NSAttributedString alloc] initWithString:str attributes:@{ NSFontAttributeName:[UIFont systemFontOfSize:17.0f] 
}]; 
    CGRect rect = [attributedText boundingRectWithSize:(CGSize){225, MAXFLOAT} 
              options:NSStringDrawingUsesLineFragmentOrigin 
              context:nil]; 
    CGSize requiredSize = rect.size; 
    return requiredSize.height + 30; 
    } 


+0

Разве это не размерWithFont? Также я не вижу, как это совершенно отличается от того, что я уже делаю –

+0

А также, почему вы добавляете textView в качестве подзадачи, а не postContent? –

+0

ya thats becz без дуги u может изменить его i did't освободить его ждать, я редактирую свой ответ –

Смежные вопросы