gpt4 book ai didi

swift - 如何通过 Autolayout 的视觉格式语言垂直堆叠两个 UI 元素

转载 作者:行者123 更新时间:2023-11-28 09:16:00 25 4
gpt4 key购买 nike

我正在学习 AutoLayout 的可视格式语言 (VFL) 并尝试构建一个包含两个元素的 View :

  • UITextView 距顶部约 20 点,应填满大部分iPhone 上可用的垂直空间
  • 需要位于 UITextView 下方的 UIButton,没有任何两者之间的填充。按钮底部应为 20 点从父 View 的底部。

我认为以下内容可以解决问题。

let verticalBindings = ["textView": self.textView, "button": self.button]

let verticalConstraints = NSLayoutConstraint.constraintsWithVisualFormat(
"V:|-20-[textView][button]-20-|",
options: NSLayoutFormatOptions.AlignAllLeft,
metrics:nil,
views:verticalBindings)

self.view.addConstraints(verticalConstraints)

但是,当我运行时,UITextView 是不可见的,并且我选择布局元素的方式中的某些东西会掩盖它。您如何布置元素,使它们垂直堆叠在彼此之上?

我也不确定如何设置 textView 的大小,以便它应该是从顶部和底部的填充以及按钮的高度中减去后可用的任何垂直空间。

我更喜欢用 VFL 来描述这个布局。

最佳答案

您是否忘记设置水平约束?上面的代码运行良好。

- (void)viewDidLoad
{
NSString *const kViewVertical = @"V:|-20-[_textView][_button]-20-|";
NSString *const kTextViewHorizontal = @"|-[_textView]-|";
NSString *const kButtonHorizontal = @"|-[_button]-|";

NSDictionary *dictionary = NSDictionaryOfVariableBindings(_textView, _button);

NSArray *contraintOne = [NSLayoutConstraint constraintsWithVisualFormat:kViewVertical
options:NSLayoutFormatAlignAllLeft
metrics:nil
views:dictionary];

NSArray *constraintTwo = [NSLayoutConstraint constraintsWithVisualFormat:kTextViewHorizontal
options:NSLayoutFormatAlignAllLeft
metrics:nil
views:dictionary];

NSArray *constraintThree = [NSLayoutConstraint constraintsWithVisualFormat:kButtonHorizontal
options:NSLayoutFormatAlignAllLeft
metrics:nil
views:dictionary];
[self.view addConstraints:constraintOne];
[self.view addConstraints:constraintTwo];
[self.view addConstraints:constraintThree];
}

编辑:不要忘记设置

[_button setTranslatesAutoresizingMaskIntoConstraints:NO];
[_textView setTranslatesAutoresizingMaskIntoConstraints:NO];

我不擅长 Swift,无论如何,希望对您有所帮助。

关于swift - 如何通过 Autolayout 的视觉格式语言垂直堆叠两个 UI 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27663860/

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