我在Tableheader中有这样的图像。
下载图像后,我需要更新该图像的高度,并更新tableheader的高度。
[self.ivMain setImageWithURL:[NSURL URLWithString:@"http://www.naturefineartphotos.com/wordpress/wp-content/uploads/2014/11/utah_aspenfamilyportrait_1001.jpg"] completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
dispatch_async(dispatch_get_main_queue(), ^{
CGFloat height = (image.size.height/ image.size.width) * CGRectGetWidth(self.frame);
[self.constraintIVMainHeight setConstant:height];
[self.delegate setTableHeader];
});
} usingActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
但是桌面高度不会改变。我想tableview限制,我尝试像这样更新我的布局。
- (void)setTableHeader {
[self.vwEventDetail removeFromSuperview];
[self.tblDetail setTableHeaderView:[[UIView alloc] initWithFrame:CGRectZero]];
[self.vwEventDetail layoutSubviews];
[self.vwEventDetail setNeedsLayout];
[self.tblDetail setTableHeaderView:self.vwEventDetail];
}
这也不行。我该怎么办?如果我使用自动调整大小,很容易。为什么使用约束很困难?难道我做错了什么?
答案 0 :(得分:1)
<强>问题:强>
(1)您正在布局没有超级视图的视图。这不起作用。
[self.vwEventDetail removeFromSuperview];
(2)当您设置tableview标头时,您使用的视图成为标题视图。和标题视图不适用于高度约束。它会忽略它。即使你在设置它之后进行布局。
viewDidLayoutSubviews
中的注意:始终将您的观点保留在标题视图中。添加它们 故事板并且不要在运行时将其删除。
代码示例(Swift):
class ViewController: UIViewController {
@IBOutlet weak var containerView: UIView!
@IBOutlet weak var headerView: UIView!
@IBOutlet weak var imageHeightConstraint: NSLayoutConstraint!
override func viewDidLoad() {
super.viewDidLoad()
}
func donwloadFinished() {
imageHeightConstraint.constant
= (image.size.height/ image.size.width) * CGRectGetWidth(self.frame);
self.view.layoutIfNeeded()
self.view.layoutSubviews()
self.view.setNeedsLayout()
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
headerView.frame = containerView.frame
}
}