gpt4 book ai didi

ios - AutoLayout 动态 .xib View 高度

转载 作者:技术小花猫 更新时间:2023-10-29 10:34:39 26 4
gpt4 key购买 nike

我没能在 AutoLayout 中找到很多关于单个 .xib 文件的方法...

我有一个独立的 .xib 文件,它有 3 个 View - 一个标题 View (包含两个标签)、一个输入 View 和一个页脚(包含两个按钮)。它看起来像这样:

enter image description here

标题 View 中的标签有约束,会影响标题 View 的垂直尺寸,进而影响整个 View 的尺寸。 subheader 是一个 0 行的标签,这意味着它是多行的和动态的。其他所有东西都有一个设置的高度,水平约束到父 View ,顶部约束到兄弟(或标题 View 情况下的父 View )。

我遇到的问题是,当我在代码中加载此 .xib 文件以进行显示时,根据 Xcode 检查器中定义的内容,高度始终是静态的。是否可以根据宽度使整个 View 的高度动态化(这会影响动态标签高度,从而影响 View 的其余部分)?

例如 - 如果我从 .xib 加载此 View 并将其宽度设置为 300,那么我如何调整其高度以适应动态标签的新高度?我是否需要使用 intrinsicContentSize 方法来定义此大小?

最佳答案

经过大量实验和阅读,我找到了答案。在某种构造函数中加载 .xib 时(在我的例子中是类级别的便捷方法),您必须确保调用 [view setTranslatesAutoresizingMaskIntoConstraints:NO]; 例如,我已经完成了以下操作:

+ (InputView *)inputViewWithHeader:(NSString *)header subHeader:(NSString *)subHeader inputValidation:(ValidationBlock)validation
{
InputView *inputView = [[[NSBundle mainBundle] loadNibNamed:@"InputView" owner:self options:nil] lastObject];
if ([inputView isKindOfClass:[InputView class]]) {
[inputView setTranslatesAutoresizingMaskIntoConstraints:NO];
[inputView configureWithHeader:header subHeader:subHeader inputValidation:validation];
[inputView layoutIfNeeded];
[inputView invalidateIntrinsicContentSize];
return inputView;
}
return nil;
}

然后,有必要覆盖 layoutSubviewsintrinsicContentSize。覆盖 layoutSubviews 允许我设置标签的 preferredMaxLayoutWidth,而覆盖 intrinsicContentSize 允许我根据约束和 subview 计算大小!这是我的实现:

- (void)layoutSubviews {
[super layoutSubviews];
self.subHeaderLabel.preferredMaxLayoutWidth = CGRectGetWidth(self.bounds);
[super layoutSubviews];
}

- (CGSize)intrinsicContentSize {
CGFloat height = self.headerView.bounds.size.height;
height += self.headerInputSpacer.constant;
height += self.inputField.bounds.size.height;
height += self.inputButtonSpacer.constant;
height += self.buttonView.bounds.size.height;
CGSize size = CGSizeMake([UIScreen mainScreen].bounds.size.width - 20, height);
return size;
}

我敢肯定有办法改进这一点,或者有更好的方法来实现它,但现在至少它的大小是正确的!对于不应具有用户定义框架的 View 非常有用。

关于ios - AutoLayout 动态 .xib View 高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27851647/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com