2013-08-02 2 views
1

В моем основном представлении у меня есть заголовок (метка) и нижний колонтитул (кнопка). В середине есть стол. Таблица берет данные из MutableArray, поэтому количество элементов таблицы различно каждый раз.UITableView динамический размер

Перед и за столом у меня есть несколько вертикальных пространств (задано ограничениями), потому что я хочу иметь некоторое пространство между верхним и нижним колонтитулом и таблицей. Итак, теперь таблица распространяется на всю «среднюю» часть. Хорошо.

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

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

    int count = accController.connectedAccessories.count; 

    [tableView setContentSize:CGSizeMake(tableView.contentSize.width, tableView.rowHeight * count)]; 
    return count; 
} 

Но это не работает. Если добавить эту строку после setContentSize:

tableView.frame = CGRectMake(tableView.frame.origin.x, tableView.frame.origin.y, tableView.frame.size.width, tableView.contentSize.height); 

Это работает, но если у меня есть много вещей, ограничения сломаны и таблицы по сноске. Есть идеи, как это сделать? Спасибо

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

ответ

1

Пропустить пустой вид, поскольку viewForFooterInSection может вам помочь.

Попробуйте ---

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section 
{ 
    UIView *view=[[UIView alloc] init]; 
    return view; 
} 
1

Вы должны попробовать этот код, который решает ваш вопрос

cell.selectionStyle=UITableViewCellSelectionStyleNone; 

Если вы хотите добавить изображение в фоновую клетка использует этот код

cell.backgroundView = [[UIImageView alloc] initWithImage:[ [UIImage imageNamed:@"image1.png"] stretchableImageWithLeftCapWidth:0.0 topCapHeight:5.0] ]; 
0

Попробуйте подписать код. Я надеюсь, что это может помочь вам

-(void)viewDidLoad 
{ 
    tableView.frame = CGRectMake(tableView.frame.origin.x, tableView.frame.origin.y, tableView.frame.size.width, tableView.contentSize.height); 
    [tableView reloadData]; 
    tableView.frame = CGRectMake(tableView.frame.origin.x, tableView.frame.origin.y, tableView.frame.size.width, [self tableViewHeight]); 

} 
- (CGFloat)tableViewHeight 
{ 
    [_tableView layoutIfNeeded]; 
    return [_tableView contentSize].height; 
} 
1

пожалуйста согласно следующим в файле .h

@interface ViewController : UIViewController<UITableViewDelegate,UITableViewDataSource> 
{ 
    NSMutableArray *tempDataArray; 
    UITableView *tblVIew; 
} 

@end 

в .m файл

#define cellHeight 30 
#define headerHeight 50 
#define footerHeight 50 


@interface ViewController() 

@end 

@implementation ViewController 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
    //[myMapView addAnnotation:(id<MKAnnotation>)]; 
    myScroll.hidden=YES; 

    tempDataArray=[[NSMutableArray alloc] initWithObjects:@"Item1", nil]; 
    [self generateTableView]; 

} 

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

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier [email protected]"Cell"; 
    UITableViewCell *cell = [tableView 
          dequeueReusableCellWithIdentifier:CellIdentifier]; 

    if (cell == nil) 
    { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier]; 
    } 
    cell.textLabel.text=[tempDataArray objectAtIndex:indexPath.row]; 
    cell.textLabel.textAlignment=NSTextAlignmentCenter; 

    return cell; 
} 

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    return cellHeight; 
} 

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section 
{ 
    return headerHeight; 
} 
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section 
{ 
    return footerHeight; 
} 


- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section 
{ 
    UILabel *lblHeader=[[UILabel alloc] initWithFrame:CGRectMake(50, 5, 200, 30)]; 
    [lblHeader setText:@"Header"]; 
    [lblHeader setBackgroundColor:[UIColor clearColor]]; 
    [lblHeader setFont:[UIFont systemFontOfSize:20]]; 
    [lblHeader setTextColor:[UIColor redColor]]; 
    [lblHeader setTextAlignment:NSTextAlignmentCenter]; 
    return lblHeader; 
} 
// custom view for header. will be adjusted to default or specified header height 
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section 
{ 
    CGRect frame = CGRectMake(10, 5, 220, 40); 
      UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; 
      button.frame = frame; 
      [button setTitle:(NSString *)@"Footer" forState:(UIControlState)UIControlStateNormal]; 
    [button setTintColor:[UIColor blackColor]]; 

      [button addTarget:self action:@selector(buttonTapped:) forControlEvents:UIControlEventTouchUpInside]; 
      [button setBackgroundImage:[UIImage imageNamed:@"temp1.png"] forState:UIControlStateNormal]; 
     //[button setBackgroundColor:[UIColor whiteColor]]; 
      [myScroll addSubview:button]; 
    return button; 
} 
// custom view for footer. will be adjusted to default or specified footer height 

-(void)buttonTapped:(id)sender 
{ 
    // code for redirecting to another view 
    // use button tag property for identifying perticular record 
    [self generateTableView]; 
} 

-(void)generateTableView 
{ 
    tblVIew=nil; 
    [tblVIew removeFromSuperview]; 

    [tempDataArray addObject:@" new item"]; 
    tblVIew=[[UITableView alloc] initWithFrame:CGRectMake(40, 50, 220,(cellHeight *[tempDataArray count])+headerHeight+footerHeight)]; 
    tblVIew.delegate=self; 
    tblVIew.dataSource=self; 
    [self.view addSubview:tblVIew]; 
    [tblVIew reloadData]; 
} 

я надеюсь, что это поможет.

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