具有自动布局的 NSTextFields;像打字一样长进太空
Posted
技术标签:
【中文标题】具有自动布局的 NSTextFields;像打字一样长进太空【英文标题】:NSTextFields with auto-layout; grow into space as typing 【发布时间】:2014-04-02 18:23:16 【问题描述】:我想根据以下要求来布局我的视图: a) 有 2 个文本字段,最小宽度均为 90 b)我希望文本字段之间始终保持 10 的间隙 c) 我希望正在输入的文本字段根据需要变大,并开始占用右侧的空白空间。如果第一个字段是类型,它应该变大并将最后一个字段推入空间(当然只增加第一个字段的宽度) d) 我希望文本字段在接近视图右边缘后停止增长(标准 20 像素) e) 高度限制很简单:只有22px,与图片顶部对齐
这是我想要的布局:
以下是限制条件:
我已经尝试了所有方法,但我无法让它工作。当您输入时,我可以让一个文本字段正确增加(使用此链接中的答案:getting a NSTextField to grow with the text in auto layout?),但无法使其与旁边的第二个文本字段一起使用,从而将其推入空白空间。我已经玩弄了内容拥抱/压缩阻力优先级,给文本字段> = 90宽度(右边有一个针)......在IB中似乎没有正确设置(使用Xcode 5.1)。如果我添加宽度约束,它会抱怨约束不明确,或者抱怨缺少没有宽度的约束。
任何想法如何让它工作?
编辑:
这就是我想象的理想布局的样子:右侧固定小于 400 的约束。但它仍然在那里抱怨“不等式约束模糊”。
【问题讨论】:
【参考方案1】:这个问题被问到已经快一年了,但我认为这是一个非常值得回答的好问题,所以我着手解决您的问题,并设法以一种非常简单的方式解决它。
您可以通过点击here在 Github 中找到示例项目。
记住,我是使用 UIKit 做的,所以我希望你在桌面框架中拥有相同的 API。
首先我像这样设置约束:
firstTextField:
Leading = 20pt (to superView),
Width >= 90pt,
Trailing = 10pt (to secondTextField),
Vertical Align Y (to superView)
secontTextField:
Leading = 10pt (to firstTextField),
Width >= 90pt,
Trailing = 20pt (to superView),
Vertical Align Y (to superView)
界面就是这样。现在,在代码中,您需要一个指向firstTextField
的出口,以及一个用于文本更改时的回调方法。然后,在这个方法中你必须使firstTextField
的instrinsicContentSize
无效:
@interface ViewController () <UITextFieldDelegate>
@property (weak, nonatomic) IBOutlet UITextField *firstTextField;
@end
@implementation ViewController
- (void)viewDidLoad
[super viewDidLoad];
[self.firstTextField addTarget:self
action:@selector(textFieldDidChange)
forControlEvents:UIControlEventEditingChanged];
- (void)textFieldDidChange
[self.firstTextField invalidateIntrinsicContentSize];
@end
【讨论】:
以上是关于具有自动布局的 NSTextFields;像打字一样长进太空的主要内容,如果未能解决你的问题,请参考以下文章
是啥导致两个具有相同自动布局约束的 UITableViewCell 表现不同?