2014-01-15 57 views
0

我試圖根據標題UISegmentedControl中的選擇調整部分標題的大小。 出於某種原因,它只是不想工作。我已經嘗試過[self.tableView beginUpdates];[self.tableView endUpdates];之前,周圍和之後的變化高度代碼..但它只是很奇怪。調整UITableViewController中部分標題的大小無法正常工作

我知道它隱藏和顯示內容,但它似乎爲視圖分配不同的高度,即使認爲標題的大小應該更小。

這是發生了什麼: https://dl.dropboxusercontent.com/u/3077127/Problem3.mov

這是我的代碼:

typedef enum { 
    kSearchTypeFrom = 0, 
    kSearchTypeTo 
} kSearchType; 

@interface MainVC() 

@property (nonatomic, strong) FilterVC *filterView; 
@property (nonatomic, assign) kSearchType searchType; 

@end 

@implementation MainVC 

@synthesize filterView = _filterView; 
@synthesize searchType = _searchType; 

[...] 

- (void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 

    self.searchType = kSearchTypeFrom; 

    [self.tableView beginUpdates]; 
    [self.tableView endUpdates]; 
} 

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

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

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"Cell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier]; 
    } 

    // Configure the cell... 
    [cell.detailTextLabel setText:@"Test"]; 

    return cell; 
} 

- (UIView*)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section 
{ 
    if (!self.filterView) { 
     self.filterView = [[FilterVC alloc] init]; 
     [self.filterView.view setBackgroundColor:self.navigationController.navigationBar.barTintColor]; 
    } 

    [self.filterView.segment setSelectedSegmentIndex:self.searchType]; 

    [self.filterView.segment addTarget:self action:@selector(didChangeSegmentSelection:) forControlEvents:UIControlEventValueChanged]; 

    return self.filterView.view; 
} 

- (float)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section 
{ 
    if (self.searchType == kSearchTypeFrom) 
    { 
     return 130; 
    } 
    else { 
     return 100; 
    } 
} 

#pragma mark - Height change table section 

- (void)didChangeSegmentSelection:(UISegmentedControl*)segment 
{ 
    [self.tableView beginUpdates]; 

    self.searchType = segment.selectedSegmentIndex; 

    NSLog(@"Selected: %d", segment.selectedSegmentIndex); 

    if (segment.selectedSegmentIndex == 0) 
    { 
     [self.filterView.changeToText setHidden:NO]; 
     [self.filterView.changeToButton setHidden:NO]; 

     [self.filterView.fromButton setUserInteractionEnabled:NO]; 
    } 
    else { 
     [self.filterView.changeToText setHidden:YES]; 
     [self.filterView.changeToButton setHidden:YES]; 

     [self.filterView.fromButton setUserInteractionEnabled:YES]; 
    } 

    [self.tableView endUpdates]; 
    [self.filterView.view needsUpdateConstraints]; 
} 

[...] 

FilterVC類不過是包含以下內容的UIViewController的更多:

是什麼我做錯了嗎?

+0

你的Dropbox的鏈接似乎並不有效。 –

+0

對不起...假期項目..和度假村的無線網絡連接不好。沒有上傳。我現在正在嘗試。 –

+0

@TimothyMoose文件已上傳,應該可以工作。感謝您的注意。 –

回答

0

作爲替代,以試圖動畫,你可以嘗試使用重新加載表如下:

- (void)didChangeSegmentSelection:(UISegmentedControl*)segment 
{ 
    //[self.tableView beginUpdates]; 

    self.searchType = segment.selectedSegmentIndex; 

    NSLog(@"Selected: %d", segment.selectedSegmentIndex); 

    if (segment.selectedSegmentIndex == 0) 
    { 
     [self.filterView.changeToText setHidden:NO]; 
     [self.filterView.changeToButton setHidden:NO]; 

     [self.filterView.fromButton setUserInteractionEnabled:NO]; 
    } 
    else { 
     [self.filterView.changeToText setHidden:YES]; 
     [self.filterView.changeToButton setHidden:YES]; 

     [self.filterView.fromButton setUserInteractionEnabled:YES]; 
    } 

    //[self.tableView endUpdates]; 
    [self.tableView reloadData]; 
    [self.filterView.view needsUpdateConstraints]; 
} 

編輯:

怎麼樣一個變量來跟蹤高度?這是草率的代碼,但如果概念的作品,你可以重構它:

// Declare a variable 
@proprty (strong, nonatomic) float headerHeight; 

// Use that variable for defining the height 
- (float)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section 
{ 
    if (self.searchType == kSearchTypeFrom) 
    { 
     headerHeight = 130; 
    } 
    else { 
     headerHeight = 100; 
    } 

    return headerHeight 
} 

然後改變變量:

- (void)didChangeSegmentSelection:(UISegmentedControl*)segment 
{ 
    [self.tableView beginUpdates]; 

    self.searchType = segment.selectedSegmentIndex; 

    // Change the variable used for the header height 
    if (self.searchType == kSearchTypeFrom) 
    { 
     headerHeight = 130; 
    } 
    else { 
     headerHeight = 100; 
    } 

    NSLog(@"Selected: %d", segment.selectedSegmentIndex); 

    if (segment.selectedSegmentIndex == 0) 
    { 
     [self.filterView.changeToText setHidden:NO]; 
     [self.filterView.changeToButton setHidden:NO]; 

     [self.filterView.fromButton setUserInteractionEnabled:NO]; 
    } 
    else { 
     [self.filterView.changeToText setHidden:YES]; 
     [self.filterView.changeToButton setHidden:YES]; 

     [self.filterView.fromButton setUserInteractionEnabled:YES]; 
    } 

    [self.tableView endUpdates]; 
    [self.filterView.view needsUpdateConstraints]; 
} 
+0

這確實奏效,但是...我喜歡動畫,這是我試圖完成的一部分。 –

+0

再試一次...看我上面的編輯 –

+0

我試過了......但不幸的是結果相同 –

相關問題