我有一个 tableViewHeader UIView,其中包含一些动态元素(准确地说是大小不一的 UILabel)。我在 IB 中设置了 UIView,连接了所有内容,并尝试根据 sizeToFit 之后的标签大小更改框架原点。
如果我在 setFrame 调用后记录新帧,它实际上会显示更新的来源,但它们不会显示在模拟器上。标签改变高度,但原点不变。
- (void)viewDidLoad
{
[super viewDidLoad];
CGRect frame;
CGFloat baseOffset = titleLbl.frame.origin.y;
offset = titleLbl.frame.size.height;
self.titleLbl.text = destObject.title;
self.titleLbl.font = [UIFont fontWithName:@"Avenir-Heavy" size:22];
[self.titleLbl sizeToFit];
frame = titleLbl.frame;
frame.origin.y = baseOffset;
//Get any change in size from the label
offset = titleLbl.frame.size.height - offset;
frame = imageView.frame;
frame.origin.y = frame.origin.y + offset;
self.imageView.frame = frame;
frame = photosBtn.frame;
frame.origin.y = frame.origin.y + offset;
[self.photosBtn setFrame:frame];
frame = detailLbl.frame;
frame.origin.y = frame.origin.y + offset;
self.detailLbl.frame = frame;
baseOffset = self.detailLbl.frame.origin.y;
CGFloat detailOffset = self.detailLbl.frame.size.height;
self.detailLbl.text = destObject.description;
[self.detailLbl sizeToFit];
frame = detailLbl.frame;
frame.origin.y = baseOffset;
self.detailLbl.frame = frame;
detailOffset = self.detailLbl.frame.size.height - detailOffset;
offset = offset + detailOffset;
frame = blueLine.frame;
frame.origin.y = frame.origin.y + offset;
self.blueLine.frame = frame;
self.whereToDiveLbl.font = [UIFont fontWithName:@"Avenir-Heavy" size:22];
frame = whereToDiveLbl.frame;
frame.origin.y = frame.origin.y + offset;
self.whereToDiveLbl.frame = frame;
frame = grayLine.frame;
frame.origin.y = frame.origin.y + offset;
self.grayLine.frame = frame;
frame = CGRectMake(headerView.frame.origin.x, headerView.frame.origin.y, headerView.frame.size.width, grayLine.frame.size.height + grayLine.frame.origin.y + 5);
self.headerView.frame = frame;
}
我曾尝试四处寻找类似的问题,但找不到任何问题。任何人都可以阐明这一点吗?
我应该指出,UIView 本身(即本例中的 headerView)确实会反射(reflect)模拟器上对其框架的更改,但其 subview 不会。如果它有任何不同,我会启用自动调整 subview 大小,但启用或禁用我得到相同的结果。
最佳答案
我发现我在 IB 中的 UIView 在身份和类型下选中了“使用自动布局”...取消选择它解决了我的问题。
关于ios - tableViewHeader 的 subview 上的 setFrame 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12570958/