Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/104.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/93.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios tableHeaderView-布局子视图和initWithFrame_Ios_Objective C_Uitableview - Fatal编程技术网

Ios tableHeaderView-布局子视图和initWithFrame

Ios tableHeaderView-布局子视图和initWithFrame,ios,objective-c,uitableview,Ios,Objective C,Uitableview,我有一个自定义的UITableViewHeaderFooterView类和一个xib。这个xib中有一个标签,它使用一个插座连接到自定义类。此自定义类用作视图控制器中表视图的tableHeaderView 我可以用所需的尺寸显示标题视图,但标题中的标签没有显示任何值 在视图控制器的viewDidLoad中 - (void)viewDidLoad { .. DashboardHeaderView* headerView = [[DashboardHeaderView alloc] init

我有一个自定义的UITableViewHeaderFooterView类和一个xib。这个xib中有一个标签,它使用一个插座连接到自定义类。此自定义类用作视图控制器中表视图的tableHeaderView

我可以用所需的尺寸显示标题视图,但标题中的标签没有显示任何值

在视图控制器的viewDidLoad中

- (void)viewDidLoad {
  ..
  DashboardHeaderView* headerView = [[DashboardHeaderView alloc] initWithFrame:CGRectMake(0, 0, 320, 180) headerText:@"XYX"];
  self.alertsTableView.tableHeaderView = headerView; 
}
在仪表板HeaderView中,它是UITableViewHeaderFooterView的子类

- (id)initWithFrame:(CGRect)frame headerText:(NSString *)headerText {
   if (self = [super initWithFrame:frame]) {
      self.headerText = headerText;

      NSArray* objects = [[NSBundle mainBundle] loadNibNamed:@"DashboardHeaderView"
                                                     owner:self
                                                   options:nil];
      UIView *nibView = [objects firstObject];
      UIView *contentView = self.contentView;
      contentView.backgroundColor = [UIColor clearColor];
      CGSize contentViewSize = contentView.frame.size;
      nibView.frame = CGRectMake(0, 0, contentViewSize.width, contentViewSize.height);

      [contentView addSubview:nibView];        
  }    
  return self;   
}        

- (void)layoutSubviews {
    [super layoutSubviews];
    self.headerLabel.text = self.headerText;
}
如果我在initWithFrame:headerText:和LayoutSubview中放置一些日志消息,我可以看到两者的self都指向不同的地址,因此在LayoutSubview中,self.headerText始终为零

layoutSubviews
<DashboardHeaderView: 0x7ff862cf1a90; baseClass = UITableViewHeaderFooterView; frame = (0 0; 320 180); text = ''; opaque = NO; autoresize = W+H; layer = <CALayer: 0x7ff861634e30>>

initWithFrame
<DashboardHeaderView: 0x7ff862cf05e0; baseClass = UITableViewHeaderFooterView; frame = (0 0; 320 180); text = ''; layer = <CALayer: 0x7ff8616d13f0>>

layoutSubviews
<DashboardHeaderView: 0x7ff862cf1a90; baseClass = UITableViewHeaderFooterView; frame = (0 0; 290 180); text = ''; opaque = NO; autoresize = W+H; layer = <CALayer: 0x7ff861634e30>>

layoutSubviews
<DashboardHeaderView: 0x7ff862cf05e0; baseClass = UITableViewHeaderFooterView; frame = (0 0; 290 180); text = ''; layer = <CALayer: 0x7ff8616d13f0>>

layoutSubviews
<DashboardHeaderView: 0x7ff862cf05e0; baseClass = UITableViewHeaderFooterView; frame = (0 0; 290 180); text = ''; layer = <CALayer: 0x7ff8616d13f0>>

layoutSubviews
<DashboardHeaderView: 0x7ff862cf1a90; baseClass = UITableViewHeaderFooterView; frame = (0 0; 345 180); text = ''; opaque = NO; autoresize = W+H; layer = <CALayer: 0x7ff861634e30>>

layoutSubviews
<DashboardHeaderView: 0x7ff862cf05e0; baseClass = UITableViewHeaderFooterView; frame = (0 0; 345 180); text = ''; layer = <CALayer: 0x7ff8616d13f0>>

layoutSubviews
<DashboardHeaderView: 0x7ff862cf1a90; baseClass = UITableViewHeaderFooterView; frame = (0 0; 345 180); text = ''; opaque = NO; autoresize = W+H; layer = <CALayer: 0x7ff861634e30>>

layoutSubviews
<DashboardHeaderView: 0x7ff862cf05e0; baseClass = UITableViewHeaderFooterView; frame = (0 0; 345 180); text = ''; layer = <CALayer: 0x7ff8616d13f0>>
布局子视图
initWithFrame
布局子视图
布局子视图
布局子视图
布局子视图
布局子视图
布局子视图
布局子视图
如果您查看以上日志,为什么我们有两个不同的地址-0x7ff862cf1a90和0x7ff862cf05e0。

说:

LayoutSubView-如果需要更精确的视图,请实现此方法 控制子视图的布局,而不是约束或 自动调整大小的行为提供了一种新的方法

您正在
layoutSubviews
方法中设置UILabel的值,该值仅用于调整大小操作

我建议您将
self.headerLabel.text=self.headerText
指令移动到
initWithFrame:headerText:
方法中,并执行其他操作,如调整大小或将约束更改到
布局子视图
方法中

这样就很好了! 说:

LayoutSubView-如果需要更精确的视图,请实现此方法 控制子视图的布局,而不是约束或 自动调整大小的行为提供了一种新的方法

您正在
layoutSubviews
方法中设置UILabel的值,该值仅用于调整大小操作

我建议您将
self.headerLabel.text=self.headerText
指令移动到
initWithFrame:headerText:
方法中,并执行其他操作,如调整大小或将约束更改到
布局子视图
方法中

这样就很好了!