2014-10-20 2 views
4

У меня возникла эта проблема, когда я попытался преобразовать свое приложение из iOS6 в iOS7/iOS8.UITableView не отображает ячейки в IOS 7

UITableView doesn't display the cells (working in iOS6)

UITableView не отображает клетки (работа в iOS6).

У меня есть подобный вид, что прекрасно работает в iOS7 (он не имеет UISearchView)

Working fine in iOS7

Я пытался несколько обходных путей, как очистить фона, удалить UISearchBar и т.д ...

код подобен в обоих примерах (клетки генерируются - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath методом)

Я использовал Reveal программное обеспечение для анализа этой иерархии.

Код, скомпилированный в XCODE 4 для поддержки iOS6, отлично работает. (Проверено на iPhone 5s с iOS7)

РЕДАКТИРОВАТЬ:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
static NSString *CellIdentifier = @"CellAloj"; 
AlojamentoTableCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; 
if(cell==nil){ 
    posicao=0; 
} 
posicao=70+(100*indexPath.row); 
[bdAl.arrayFotos removeAllObjects]; NSMutableString *simbpreco=[[NSMutableString alloc]init]; 
NSNumber *id1=[bdAl.idAlojamento objectAtIndex:indexPath.row]; 
[self drawviewRank:[id1 integerValue]]; 
//posicao=posicao+100; 

cell.backgroundView=[[UIImageView alloc]initWithImage:[UIImage imageNamed:@"aloj_cell3.png"]]; 
//Não aparecer mais celulas depois da última com conteúdo 
UIView *footer = [[UIView alloc] initWithFrame:CGRectZero]; 
self.tableView1.tableFooterView = footer; 
/////////////// 
[bdAl SelectFotos:[[bdAl.idAlojamento objectAtIndex:indexPath.row]integerValue]]; 
cell.nomeAloj.text=[bdAl.arrayNomeAloj objectAtIndex:indexPath.row]; 
cell.imgAloj.image=[[UIImage alloc]init]; 
UIImage *imagem=[bdAl.arrayFotos objectAtIndex:0]; 
cell.tipo.text=[bdAl.arrayTipoAloj objectAtIndex:indexPath.row]; 
cell.labelLocalidade.text=[bdAl.arrayLocalidade objectAtIndex:indexPath.row]; 
cell.imgAloj.image=imagem; 
CALayer * l = [cell.imgAloj layer]; 
[l setMasksToBounds:YES]; 
[l setCornerRadius:10.0]; 
cell.detailAloj.text=[bdAl.arrayDescAloj objectAtIndex:indexPath.row]; 
int i=[[bdAl.arraypreco objectAtIndex:indexPath.row]integerValue]; 
for (int j=0; j<i; j++){ 
    [simbpreco appendString:@"€"]; 
} 
[tableView1 setSeparatorStyle:UITableViewCellSeparatorStyleSingleLine]; 

[tableView1 setSeparatorColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"nav_menu.png"]]]; 
cell.preco.text=simbpreco; 
return cell; 

EDIT2:

Раскадровка: enter image description here

EDIT3: Этот метод возвращает 17 строк:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return [bdAl.arrayNomeAloj count]; 
} 

И метод numberOfSectionsInTableView:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
    return 1; 
} 

EDIT4:

#import <UIKit/UIKit.h> 
#import "AlojamentoTableViewController.h" 
@interface AlojamentoTableCell : UITableViewCell{ 

} 
@property (strong, nonatomic) IBOutlet UILabel *tipo; 
@property (strong, nonatomic)IBOutlet UILabel *nomeAloj; 
@property (strong, nonatomic)IBOutlet UILabel *detailAloj; 
@property (strong, nonatomic)IBOutlet UIImageView *imgAloj; 
@property (strong, nonatomic) IBOutlet UILabel *labelLocalidade; 
@property (strong, nonatomic)IBOutlet UILabel *preco; 
@end 
+0

Вы пытались отключить автоспуск? –

+0

@RezaShirazian да, такой же выпуск. –

+0

Можете ли вы вставить свой tableView: cellForRowAtIndexPath: code? –

ответ

3

Я полагаю, что это проблема:

Я имел этот метод:

-(void)RemoveAllObjects{ 
    [bdAl.arrayLocalidade removeAllObjects]; 
    [bdAl.idAlojamento removeAllObjects]; 
    [bdAl.arrayDescAloj removeAllObjects]; 
    [bdAl.arrayFotos removeAllObjects]; 
    [bdAl.arrayMail removeAllObjects]; 
    [bdAl.arrayTipoAloj removeAllObjects]; 
    [bdAl.arrayMorAloj removeAllObjects]; 
    [bdAl.arrayNomeAloj removeAllObjects]; 
    [bdAl.arrayStar removeAllObjects]; 
    [bdAl.arrayTelf removeAllObjects]; 
    [bdAl.arraypreco removeAllObjects]; 
    NSArray *subviews = [self.tableView1 subviews]; 
    for (int i=0; i<[subviews count]; i++) 
    { 
     [[subviews objectAtIndex:i] removeFromSuperview]; 
    } 
    //posicao=90; 
} 

, чтобы очистить все содержимое, когда пользователь начинает использовать функцию поиска. Этот метод был вызван в ViewWillAppear.

Я удаляю его, и все работает правильно.

Спасибо всем (я должен просмотреть все мой код, я знаю.)

EDIT: UISerachView hiearchy изменилось в iOS7, поэтому рассчитывать на подвиды не удалось.

2

Я думаю, что есть что-то не так с вашими ограничениями. Представления перемещаются/изменяются, что приводит к тому, что некоторые части не отображаются должным образом. Другие части показывают, что просмотренные виды не обрезаются, и поэтому биты, которые вы рисуете сами, размещаются за пределами вида, в котором они должны быть.

Используйте следующий код, чтобы добавить границу вокруг разных видов, чтобы увидеть, где они находятся. Я подозреваю, что вы обнаружите, что многие из них не размещаются там, где вы думаете.

Еще одна вещь, которую нужно попробовать - отключить автозапуск в своем раскадровке.

@interface UIView (Extension) 

- (void)addBorder; 
@end 


@implementation UIView (Extension) 

- (void)addBorder 
{ 
    [self.layer setBorderColor: [[UIColor redColor] CGColor]]; 
    [self.layer setBorderWidth: 2]; 
} 

@end 
  • EDIT -

Непосредственно перед этой линией cell.nomeAloj.text=[bdAl.arrayNomeAloj objectAtIndex:indexPath.row]; добавьте строку assert(cell.nomeAloj); и скажите мне, что происходит, когда вы запустите код.

+0

Я также попытался отключить автоматическую компоновку без успеха. –

+0

Когда вы добавили границу к (например) ярлыку 'cell.nomeAloj'? Он появляется? Кроме того, поместите этот код в свой метод cellForRowAtIndexPath 'assert (cell.nomeAloj);' –

+0

Я добавил его, ничего не произошло. –

1

Поскольку вы говорите, что вызывается cellForRowAtIndexPath, это означает, что должны быть созданы ячейки. Одна вещь, о которой я могу думать, заключается в том, что ваши UITableView или UIView фактически не имеют размера.

Поэтому нормальный UITableView должен иметь возможность прокрутки. Вы можете прокручивать? или даже взаимодействовать с этой таблицей?

+0

Да, я могу прокрутить его, и я могу увидеть 17 добавленных ярлыков (количество объектов, которые генерируют количество ячеек). Этот текст метки находится в другом методе, который вызывает внутри 'cellForRowAtIndexPath' –

-1
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    [cell setBackgroundColor:[UIColor clearColor]]; 
    [cell setSelectionStyle:UITableViewCellSelectionStyleNone]; 
} 
+0

Как я уже сказал, это не фоновый цвет. –