2017-12-26 20 views
0

enter image description hereTablewView Zelle alle Zellen in der gleichen Reihe

enter image description here

Kein Storyboard in diesem Projekt beteiligen

Der problematischste Teil i ausrechnen kann nicht, wo diese zu lösen. Im Verwenden von SDK.

_msgTableView = [[UITableView alloc] init]; 
_msgTableView.backgroundColor = [UIColor blackColor]; 
_msgTableView.delegate = self; 
_msgTableView.dataSource = self; 
_msgTableView.separatorInset = UIEdgeInsetsZero; 
_msgTableView.separatorStyle = UITableViewCellSeparatorStyleNone; 
_msgTableView.showsVerticalScrollIndicator = NO; 
[self.view addSubview:_msgTableView]; 

diese Funktion auf NSNotification

CGRect moveToRect = CGRectMake(-(msgFrame.origin.x+ msgFrame.size.width), msgFrame.origin.y, msgFrame.size.width, msgFrame.size.height); 
    [_msgTableView setFrame:moveToRect]; 

nannte dies in der erweiterten Ansicht

[_msgTableView sizeWith:CGSizeMake(screenW, 250)]; 
[_msgTableView layoutAbove:_bottomView margin:kDefaultMargin]; 

Diese Nachricht durch Mitteilung benachrichtigen, wenn neue aufgerufen genannt wird

[_msgDatas addObject:msg]; 
if (_msgDatas.count >= 500) 
{ 

    NSRange range = NSMakeRange(_msgDatas.count - 100, 100);//只保留最新的100条消息 
    NSArray *temp = [_msgDatas subarrayWithRange:range]; 
    [_msgDatas removeAllObjects]; 
    [_msgDatas addObjectsFromArray:temp]; 
    [_msgTableView reloadData]; 
} 
else 
{ 
    [_msgTableView beginUpdates]; 
    NSIndexPath *index = [NSIndexPath indexPathForRow:_msgDatas.count - 1 inSection:0]; 
    [_msgTableView insertRowsAtIndexPaths:@[index] withRowAnimation:UITableViewRowAnimationAutomatic]; 
    [_msgTableView endUpdates]; 
} 
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:_msgDatas.count-1 inSection:0]; 
if (indexPath.row < [_msgTableView numberOfRowsInSection:0]) 
{ 
    [_msgTableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionBottom animated:YES]; 
} 

thi s ist die Zelle für Zeile in Funktion

MsgTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"LiveTextMessageCell"]; 
    if (cell == nil) 
    { 
     cell = [[MsgTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"LiveTextMessageCell"]; 
    } 
    id msg = _msgDatas[indexPath.row]; 
    if ([msg isKindOfClass:[ILVLiveTextMessage class]]) 
    { 
     ILVLiveTextMessage *textMsg = (ILVLiveTextMessage *)msg; 

     [cell configMsg:textMsg.sendId ? textMsg.sendId : [[ILiveLoginManager getInstance] getLoginId] msg:textMsg.text]; 
    } 
    if ([msg isKindOfClass:[ILVLiveCustomMessage class]]) 
    { 
     ILVLiveCustomMessage *customMsg = (ILVLiveCustomMessage *)msg; 
     [cell configTips:customMsg.sendId]; 
    } 
    cell.selectionStyle = UITableViewCellSelectionStyleNone; 
    return cell; 

Dies ist die ConfigWith Funktion

 CGFloat selfW = [UIScreen mainScreen].bounds.size.width ; 
     CGFloat selfH = 30; 
     UIFont *msgFont = [UIFont fontWithName:@"Superclarendon" size:12];//Helvetica-Bold 
     _nickname = profile.nickname; 
     NSString *showInfo = [NSString stringWithFormat:@"%@: %@",profile.nickname, text]; 
     NSMutableAttributedString *attrStr = [[NSMutableAttributedString alloc] initWithString:showInfo]; 
     [attrStr addAttribute:NSForegroundColorAttributeName value:kColorGreen range:NSMakeRange(0, profile.nickname.length+1)];//+1是因为有个冒号 
     [attrStr addAttribute:NSForegroundColorAttributeName value:kColorWhite range:NSMakeRange(profile.nickname.length+1, text.length+1)];//+1是因为有个空格 
     [attrStr addAttribute:NSFontAttributeName value:msgFont range:NSMakeRange(0, showInfo.length)];//加粗 
     _msgLabel.attributedText = attrStr; 
     CGSize labelsize = [self textHeightSize:showInfo maxSize:CGSizeMake(selfW - kDefaultMargin*2, selfH * 3) textFont:msgFont]; 
     [_msgLabel setFrame:CGRectMake(_msgLabel.frame.origin.x, _msgLabel.frame.origin.y, labelsize.width + kDefaultMargin, labelsize.height)]; 
     [self setFrame:CGRectMake(0, 0, selfW, labelsize.height)]; 
     _height = labelsize.height; 
     _msgLabel.hidden = NO; 
     _tipsLabel.hidden = YES; 

Antwort

0

Nach meinem Verständnis, wenn eine neue Nachricht Benachrichtigung gekommen ist, halten Sie nicht die Höhe der Zellen entsprechend den Daten. Daher scheinen sie sich zu überlappen.

Jetzt müssen Sie die Höhe der neuen Benachrichtigung beibehalten, und die Daten erhalten sollten zu Ihrem Haupt-Array (Datenquelle) hinzugefügt werden. Und daher kann leicht koordiniert werden. Und Zellen werden nicht überlappt.

Um die Höhe der Zellen beizubehalten, verwenden Sie "heightForRowAtIndexPath" Delegate-Funktionen der Tabellenansicht und Pflegen Sie die Höhe einer bestimmten Zelle entsprechend.

Und noch eins, bitte stellen Sie sicher, dass einzelne Nachricht in der einzelnen Zelle sein wird. Dies wird entsprechend gehandhabt.

0

Bitte stellen Sie sicher, dass eine einzelne Nachricht, die von einer einzelnen Zelle geladen wurde, und die Höhe der Zelle ist richtig. Es sieht so aus, als hättest du viele UILabels in derselben Zelle erstellt.

+0

das erste Bild zeigt, dass die Zelle richtig eingestellt als 1 UILabel pro Zelle. aber die Positionierung vermasselt ... es hält die Zelle aus irgendeinem Grund oben zu pushen –

0

enter image description here Ich fand die Lösung. mache ich eigentlich eine Nib-Datei als Erweiterung Tableview Zelle und i registrieren als nib

aber im für @mayanksengar Antwort zu akzeptieren mir einen guten Einblick geben

I und nur eine xib Datei und .h erstellt.m

enter image description here

Register XIb zur Tabellenansicht

[_msgTableView registerNib:[UINib nibWithNibName:@"customCell2" bundle:nil] forCellReuseIdentifier:@"customCell2"]; 

verwendet schließlich

NSString *cellIdentifier = @"customCell2"; 
    customCell2 *cell= [_msgTableView dequeueReusableCellWithIdentifier:cellIdentifier]; 
    if (!cell){ 
     [_msgTableView registerNib:[UINib nibWithNibName:@"customCell2" bundle:nil] forCellReuseIdentifier:@"customCell2"]; 
    } 
Verwandte Themen