繁体   English   中英

从XIB通过自动布局到UItableView标头的UIVIew

[英]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的方式: 界面构建器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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM