Ios tableHeaderView-布局子视图和initWithFrame
我有一个自定义的UITableViewHeaderFooterView类和一个xib。这个xib中有一个标签,它使用一个插座连接到自定义类。此自定义类用作视图控制器中表视图的tableHeaderView 我可以用所需的尺寸显示标题视图,但标题中的标签没有显示任何值 在视图控制器的viewDidLoad中Ios tableHeaderView-布局子视图和initWithFrame,ios,objective-c,uitableview,Ios,Objective C,Uitableview,我有一个自定义的UITableViewHeaderFooterView类和一个xib。这个xib中有一个标签,它使用一个插座连接到自定义类。此自定义类用作视图控制器中表视图的tableHeaderView 我可以用所需的尺寸显示标题视图,但标题中的标签没有显示任何值 在视图控制器的viewDidLoad中 - (void)viewDidLoad { .. DashboardHeaderView* headerView = [[DashboardHeaderView alloc] init
- (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:
方法中,并执行其他操作,如调整大小或将约束更改到布局子视图
方法中
这样就很好了!