大佬教程收集整理的这篇文章主要介绍了iphone – 是否可以使用AutoLayout与UITableView的tableHeaderView?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我做了一个UIView的子类添加了一切(标签等…)我想与他们的约束,然后我添加这个CustomView到UITableView’tableHeaderView。
一切都工作正常,除了UITableView总是显示在CustomView之上,通过上面我的意思是CustomView是在UITableView所以它不能被看到!
看来,无论我做什么,UITableView’tableHeaderView的高度总是0(所以是宽度,x和y)。
我的问题:是否有可能完成这一点,而不手动设置框架?
编辑:
我使用的CustomView的视图有这些约束:
_title = [[UILabel alloc]init]; _title.text = @"title"; [self addSubview:_title]; [_title keep:[KeePTOPInset rules:@[[KeepEqual must:5]]]]; // title has to stay at least 5 away from the supperview Top [_title keep:[KeepRighTinset rules:@[[KeepMin must:5]]]]; [_title keep:[KeepLefTinset rules:@[[KeepMin must:5]]]]; [_title keep:[KeepBottomInset rules:@[[KeepMin must:5]]]];
我使用一个方便的库“KeepLayout”,因为手动写入约束永远和太多的行一个单一的约束,但@L_673_7@是自我解释。
而UITableView有这些约束:
_tableView = [[UITableView alloc]init]; _tableView.translatesAutoresizingMaskIntoConsTraints = NO; _tableView.delegate = self; _tableView.datasource = self; _tableView.BACkgroundColor = [UIColor clearColor]; [self.view addSubview:_tableView]; [_tableView keep:[KeePTOPInset rules:@[[KeepEqual must:0]]]];// these 4 consTraints make the UITableView stays 0 away from the superview top left right and bottom. [_tableView keep:[KeepLefTinset rules:@[[KeepEqual must:0]]]]; [_tableView keep:[KeepRighTinset rules:@[[KeepEqual must:0]]]]; [_tableView keep:[KeepBottomInset rules:@[[KeepEqual must:0]]]]; _detailsView = [[CustomView alloc]init]; _tableView.tableHeaderView = _detailsView;
我不知道如果我必须直接在CustomView上设置一些约束,我认为CustomView的高度是由UILabel“标题”中的约束确定的。
编辑2:经过另一个调查,似乎自定义视图的高度和宽度正确计算,但自定义视图的顶部仍然在同一水平比UITableView的顶部,他们一起移动时,我滚动。
- (void)viewDidLoad { [super viewDidLoad]; self.header = [[SCAmessageView alloc] init]; self.header.titleLabel.text = @"Warning"; self.header.subtitleLabel.text = @"This is a message with enough text to span multiple lines. This text is set at runtime and might be short or long."; //set the tableHeaderView so that the required height can be determined self.tableView.tableHeaderView = self.header; [self.header setNeedsLayout]; [self.header layoutIfNeeded]; CGFloat height = [self.header systemLayoutSizeFitTingSize:UILayoutFitTingCompressedSize].height; //update the header's frame and set it again CGRect headerFrame = self.header.frame; headerFrame.size.height = height; self.header.frame = headerFrame; self.tableView.tableHeaderView = self.header; }
如果您有多行标签,这也依赖于自定义视图设置每个标签的preferredMaxLayoutWidth:
- (void)layoutSubviews { [super layoutSubviews]; self.titleLabel.preferredMaxLayoutWidth = CGRectGetWidth(self.titleLabel.framE); self.subtitleLabel.preferredMaxLayoutWidth = CGRectGetWidth(self.subtitleLabel.framE); }
或者更一般地:
override func layoutSubviews() { super.layoutSubviews() for view in subviews { guard let label = view as? UILabel where label.numberOfLines == 0 else { conTinue } label.preferredMaxLayoutWidth = CGRectGetWidth(label.framE) } }
2015年1月更新
不幸的是,这似乎仍然是必要的。这里是一个swift版本的布局过程:
tableView.tableHeaderView = header header.setNeedsLayout() header.layoutIfNeeded() let height = header.systemLayoutSizeFitTingSize(UILayoutFitTingCompressedSizE).height var frame = header.frame frame.size.height = height header.frame = frame tableView.tableHeaderView = header
我发现将它移植到UITableView上的扩展很有用:
extension UITableView { //set the tableHeaderView so that the required height can be determined,update the header's frame and set it again func setAndLayoutTableHeaderView(header: UIView) { self.tableHeaderView = header header.setNeedsLayout() header.layoutIfNeeded() let height = header.systemLayoutSizeFitTingSize(UILayoutFitTingCompressedSizE).height var frame = header.frame frame.size.height = height header.frame = frame self.tableHeaderView = header } }
用法:
let header = SCAmessageView() header.titleLabel.text = "Warning" header.subtitleLabel.text = "Warning message here." tableView.setAndLayoutTableHeaderView(header)
以上是大佬教程为你收集整理的iphone – 是否可以使用AutoLayout与UITableView的tableHeaderView?全部内容,希望文章能够帮你解决iphone – 是否可以使用AutoLayout与UITableView的tableHeaderView?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。