我有一个tableViewHeader UIView,它包含一些动态元素(准确地说具有不同大小的UILabel)。我将UIView设置为IB,将所有内容连接起来,并尝试在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)会在模拟器上反映其帧的变化,但它的子视图却没有。我有自动调整子视图,如果它有任何不同,但我得到相同的结果启用或禁用。
修改
我发现我的IB中的UIView在身份和类型下检查了“使用Autolayout”...取消选择这解决了我的问题。
希望这有助于其他类似情况。
谢谢,
布兰登
P.S。我自己会回答这个问题,但我没有代表,所以我必须等到明天再回答......或者你可以复制我所拥有的内容,我会接受它。
答案 0 :(得分:7)
我发现我的IB中的UIView在身份和类型下检查了“使用Autolayout”...取消选择这解决了我的问题。
希望这有助于其他类似情况。