代码之家  ›  专栏  ›  技术社区  ›  quantumpotato

tableView.tableHeaderView正在设置但未绘制

  •  10
  • quantumpotato  · 技术社区  · 14 年前

    每当我设置我的tableHeaderView时,我都不会在模拟器中看到它。 如果我将其添加为子视图,它最终会在节标题下绘制。你知道我在这里遗漏了什么吗?

    - (void)viewDidLoad {   
    [super viewDidLoad];
    MyTitleView *titleView = [[MyTitleView alloc] initWithFrame:CGRectMake(60,0,260,40)];
    titleView.label.text = @"My Title";
    self.navigationItem.titleView = titleView;
    [titleView release];
    
    StandardTableHeaderView *headerView = [[StandardTableHeaderView alloc] initWithFrame:CGRectMake(0,0,320,44)];
    self.tableView.tableHeaderView = headerView;
    //  [self.view addSubview:self.tableView.tableHeaderView];
    //  [headerView release];
    
    
    NSLog(@"Header: %@",self.tableView.tableHeaderView); //Logs ] Header:     <StandardTableHeaderView: 0x5a508b0; frame = (0 0; 320 44); layer = <CALayer: 0x5a51130>>
    

    编辑: StandardTableHeaderView.m初始化方法:

    - (id)initWithFrame:(CGRect)frame {
    if ((self = [super initWithFrame:frame])) {
        self.backgroundColor = [UIColor redColor];
        self.label = [[UILabel alloc] initWithFrame:CGRectMake(frame.origin.x,0,frame.size.width,frame.size.height)];
        self.label.backgroundColor = [UIColor clearColor];
        self.label.textColor = [UIColor whiteColor];
        self.label.font = [UIFont fontWithName:@"Helvetica" size:16];
        [self addSubview:self.label];
    }
    return self;
    }
    
    7 回复  |  直到 12 年前
        1
  •  7
  •   Michael Kessler    14 年前

    首先,你的代码看起来不错。

    • self.tableView 未设置
    • tableHeaderView 在之后被重写 viewDidLoad
        2
  •  7
  •   Kalle    12 年前

    我已经准备好了 CGRectZero 以为它会自己解决,但它不会出现,当它出现的时候,它会出现在导航栏下面,或者粘在第一个单元格里等等。

        3
  •  6
  •   Rob Md Fahim Faez Abir    12 年前

    我也遇到了同样的问题,并注意到如果通过调用以下命令初始化tableview,则在NIB中定义的任何tableViewHeader都不会出现:

    - (id)initWithStyle:(UITableViewStyle)style
    

    但当我使用以下命令初始化tableview时,它奇迹般地出现了:

    - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
    

        4
  •  2
  •   Denis Kutlubaev    11 年前

    我试着设置 tableHeaderView 在里面 ViewDidLoad loadView ViewDidAppear

    - (void)viewDidAppear:(BOOL)animated
    {
      [super viewDidAppear:animated];
    
      [self setupTableHeaderView];
    }
    
        5
  •  0
  •   Fonix    10 年前

        6
  •  0
  •   swapnali patil    7 年前

    当您在情节提要的UITableView中UIView并尝试设置tableView.tableHeaderView=您的\视图时,它将不起作用。您必须首先将视图拖放到视图控制器外部,创建其出口,然后设置

        7
  •  0
  •   Scotch Design    4 年前

    我在viewDidLoad()中遇到了同样的问题,它在iPhone11Pro的模拟器中工作,但在iPhone8中没有。把它移到viewDidAppear()解决了这个问题,但我最终把它移到了 viewDidLayoutSubviews() 我觉得这是最合适的地方-在所有iPhone型号的模拟器中都能完美地工作。

    override func viewDidLayoutSubviews() {
    
        let headerView = Bundle.main.loadNibNamed("HeaderView", owner: self, options: nil)?.first as? UIView
        headerView!.frame = CGRect(x: 0, y: 0, width: table_view!.frame.width, height: 160.0)
        tableView!.tableHeaderView = headerView
    }
    
        8
  •  0
  •   Anton Tropashko    4 年前

    open var intrinsicContentheight: CGFloat
    {
        achievementLabel.sizeToFit()
        let labelSize = achievementLabel.bounds.size
        return labelSize.height + 13 + .verticalMargin
    }
    

    讨厌定义头视图的类。 如果你没有动态类型,你会有一个更简单的方法。

    下面是设置tableheaderview的视图控制器中的用法 这个类的实例

    loanApplicationStepsView.bounds.size.height = loanApplicationStepsView.intrinsicContentheight
    

        9
  •  -8
  •   Rob Md Fahim Faez Abir    11 年前

    尝试在头文件中设置UITableViewDelegate,并将以下代码放入.m文件中。

    #pragma mark UITableViewDelegate
    - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { 
        return 44.0f;
    }
    
    - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
        StandardTableHeaderView *headerView = [[StandardTableHeaderView alloc] initWithFrame:CGRectMake(0,0,320,44)];
    
        return headerView;
    }