我有一个独立的.xib文件,它有3个视图 – 一个标题视图(包含两个标签),一个输入和一个页脚(包含两个按钮).看起来像这样:
标题视图中的标签具有约束,这些约束应影响标题视图的垂直大小,反过来影响整个视图的大小.子标题是带有0行的标签,这意味着它是多行和动态的.其他一切都有一个设置的高度,具有横向限制,以便监视和监视同级的顶级约束(或者在头部视图的情况下监视).
我遇到的问题是,当我在代码中加载这个.xib文件以显示时,高度总是基于Xcode检查员定义的高度.是否可以根据宽度(影响动态标签高度,因此影响视图的其余部分)使整个视图的高度变为动态?
例如 – 如果我从.xib加载这个视图,并将其宽度设置为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;}
那么有必要重写layoutSubvIEws和intrinsicContentSize.覆盖的layoutSubvIEws允许我设置我的标签的preferredMaxLayoutWIDth,而覆盖innerContentSize允许我根据约束和子视图来计算大小!这是我的实现:
- (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;}
我相信有办法改进这个,或者更好的方法来实现,但现在它至少是正确的大小!对于不应有用户定义的框架的视图非常有用.
总结以上是内存溢出为你收集整理的ios – AutoLayout动态.xib查看高度全部内容,希望文章能够帮你解决ios – AutoLayout动态.xib查看高度所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)