我正在通过编程将视图动态添加到带有布局约束的滚动视图中,对于文本视图组件,我想根据设置在文本视图中的文本设置高度约束,因此我创建了一个扩展UITextView的类。在文本视图类内部,我编写了以下代码来添加高度约束。
#import "CETextView.h"
@implementation CETextView
- (void)layoutSubviews
{
[super layoutSubviews];
if (!self.heightConstraint)
{
self.heightConstraint = [NSLayoutConstraint constraintWithItem:self attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0 constant:100];
[self addConstraint:self.heightConstraint];
}
CGRect lRect = [self contentSizeRect];
CGSize descriptionSize = lRect.size;
self.heightConstraint.constant = descriptionSize.height;
}
- (CGRect)contentSizeRect
{
NSTextContainer* textContainer = [self textContainer];
NSLayoutManager* layoutManager = [self layoutManager];
[layoutManager ensureLayoutForTextContainer: textContainer];
CGRect lRect = CGRectMake(0, 0,320, 500);
lRect.size = self.contentSize;
lRect.size.height = lRect.size.height + 5;
return lRect;
}
@end
这段代码在iOS 8.0中可以正确地获取高度,但在iOS 9.0中却会出现错误的高度。我查看了苹果关于iOS 9.0新版本的文档,发现有一些与自动布局相关的更改。
非常感谢您的帮助。