约束不适用于UITextView

Vis*_*yer 5 constraints objective-c uitextview ios

我有一个View控制器,其中视图有两个图像视图和两个文本视图.我关闭了自动布局,并使用此代码以编程方式设置第一个文本视图和第一个图像视图之间的距离:以下代码位于我的自定义视图控制器类的viewDidLoad方法中.我在两种情况下都将自动调整掩码设置为no,所以我不知道为什么代码不起作用.(tf2_logo是图像视图,itemName是文本视图)

self.tf2_logo.translatesAutoresizingMaskIntoConstraints = NO;
[self.backpackBackground addConstraint:[NSLayoutConstraint constraintWithItem:self.itemName attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.tf2_logo attribute:NSLayoutAttributeTop multiplier:1.0 constant:-1.0]];
[self.backpackBackground addConstraint:[NSLayoutConstraint constraintWithItem:self.tf2_logo attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.backpackBackground attribute:NSLayoutAttributeLeft multiplier:1.0 constant:17]];
Run Code Online (Sandbox Code Playgroud)

现在我想用我的其他文本视图做同样的事情,基本上我想保持itemName文本视图和文本视图之间的距离在一定距离.我用过这段代码:( tf2是我的其他文字视图)

self.tf2.translatesAutoresizingMaskIntoConstraints = NO;
[self.backpackBackground addConstraint:[NSLayoutConstraint constraintWithItem:self.itemName attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.tf2 attribute:NSLayoutAttributeTop multiplier:1.0 constant:-3.0]];
[self.backpackBackground addConstraint:[NSLayoutConstraint constraintWithItem:self.tf2 attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.tf2_logo attribute:NSLayoutAttributeRight multiplier:1.0 constant:20]];
Run Code Online (Sandbox Code Playgroud)

实现此代码后,tf2文本视图甚至不会显示在视图控制器中.问题是什么?

编辑:你可以在这里下载整个项目:https://www.dropbox.com/sh/u820u2ndyrncuz8/P4atI-9CAx

Rai*_*rze 3

编辑#2:您提到您关闭了自动布局,因为 UITextView 在 iOS7 中顶部有一个小间隙。要消除间隙,请尝试以下操作:

self.tf1.textContainerInset = UIEdgeInsetsZero;
Run Code Online (Sandbox Code Playgroud)

当您记录 textContainerInset 的原始值时,它显示:{8, 0, 8, 0}。两个 8 造成了间隙(一个在顶部)。上面的行将所有值设置为零,并且内容与框架顶部很好地对齐。

(编辑#1:完全改变了答案)

我假设您主要希望拥有灵活的高度imageName UITextView。首先我建议使用自动布局。您可以按照下图在Xcode中设置约束:

约束条件

红线是限制。绿线很特殊:它应该是一个高度约束,您可以在视图控制器中为其创建一个出口。(打开文档大纲视图,在树中找到高度约束,然后按住 Control 键将其拖动到代码中。)

然后在viewDidLoad方法中:

CGSize size = [self.tf1 sizeThatFits:self.tf1.frame.size];
self.tf1Height.constant = size.height;
Run Code Online (Sandbox Code Playgroud)

“lore ipsum”字段的高度现在会根据其内容进行调整。

截屏