[英]UIVIew from XIB with Autolayout to UItableView Header
我正在写,因为我对自动版式有问题。 我正在尝试使用Auto Layout在InterfaceBuilder中创建一个简单的视图,我想加载代码并输入为表的标题(而不是标题部分)。 我简要解释一下这些特征。 imageView
必须为正方形,并且必须与屏幕一样宽。 图片下方到视图底部的包含按钮和标签的空间必须高50点。 图像和按钮之间的固定距离必须为12点。 图像和标签之间的固定距离必须为13点。
所有这些功能都可以通过“自动布局”获得。 我为图像的高宽比(1:1)和距离的各种限制添加了一个约束。 好吧。
真正的问题是,通过在iphone 6+模拟器上启动应用程序(宽度为414点),图像(带有标签和按钮)位于单元格上方。
启用各种透明胶片我注意到Image View的superView
仅增加了宽度。 它不会增加其高度! 我该如何解决?
这是代码:
- (void)viewDidLoad{
//...
PhotoDetailsHeaderView *hView = (PhotoDetailsHeaderView *)[[[NSBundle mainBundle] loadNibNamed:@"PhotoDetailsHeaderView" owner:self options:nil] objectAtIndex:0];
hView.delegate = self;
self.tableView.tableHeaderView = hView;
//...
}
这就是我创建xib的方式:
这就是模拟器上的样子,绿色框是Uiimageview,黄色框(在绿色框下面)是mainview(或superview):
如何解决?
非常感谢大家!
您需要添加一个属性来存储您的PhotoDetailsHeaderView
:
@property (nonatomic, strong) PhotoDetailsHeaderView *headerView;
然后在viewDidLayoutSubviews
计算其预期的帧。 如果需要更新,请更新其框架并重新设置tableHeaderView
属性。 最后一步将强制tableView适应标题的更新框架。
- (void)viewDidLayoutSubviews{
[super viewDidLayoutSubviews];
CGRect expectedFrame = CGRectMake(0.0,0.0,self.tableview.size.width,self.tableView.size.width + 50.0);
if (!CGRectEqualToRect(self.headerView.frame, expectedFrame)) {
self.headerView.frame = expectedFrame;
self.tableView.tableHeaderView = self.headerView;
}
}
问题可能是在iOS中,您必须手动重置表视图的标题(如果其大小已更改)。 尝试以下方法:
CGRect newFrame = imageView.frame;
imageView.size.height = imageView.size.width;
imageView.frame = newFrame;
[self.tableView setTableHeaderView:imageView];
此代码应位于视图控制器的-(void)viewDidLayoutSubviews
方法中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.