iOS8 自动布局以编程方式固定到相对布局边距

2023-11-23

我有一个 UI 元素(UISwitch实际上,但实际上并不重要),它在 Interface Builder 中将前导和尾随空间固定到超级视图。 Xcode 6 中的约束如下所示:

Constraint pin

前导空间的约束实际上是相同的。约束的值为42.0分.

这正是我想要的,因为对于不同的设备我可以改变layoutMargins属性于UIView并且约束将正常工作,以增加视图之间的余量。

现在我想在代码中添加另一个视图,该视图也将前导和尾随空格固定到其超级视图边距,所以相同layoutMargins设置为超级视图将起作用。

我使用固定视图视觉格式语言使用以下语法:

NSArray *constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"|-42.0-[separatorView]-42.0-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(self.contentView, separatorView)];

[self.contentView addConstraints:constraints];
[self.contentView setNeedsUpdateConstraints];

这可行,但是layoutMargins使用此约束属性没有任何效果,因此它显然没有固定到边距,而是直接固定到超级视图。

所以我的问题是:

如何使用视觉格式语言将 UI 元素空间固定到代码中的边距?或者如果不可能,如何固定constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant: API?


在iOS8中,视觉格式语言已更新,因此“|-”或“-|”将默认使用由超级视图的layoutMargins属性定义的间距。

所以用视觉格式语言回答如下:

// programmatically set the layoutMargins, only if
// you want non-default values and they are not already set in IB!
self.contentView.layoutMargins = UIEdgeInsetsMake(0,42,0,42); // set left and right margins to 42

// assume: seperatorView is already a subview of self.contentView

// separatorView will use the constraints because we write "-" between it and the superview edge
NSArray *constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"|-[separatorView]-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(separatorView)];
[self.contentView addConstraints:constraints];

如果您想在通过直接 API 创建约束时引用布局边距,则可以使用新的仅限 iOS8 的布局属性:

NSMutableArray * constraints = [NSMutableArray array]; 
[constraints addObject:[NSLayoutConstraint constraintWithItem:self.contentView 
     attribute:NSLayoutAttributeLeftMargin 
     relatedBy:NSLayoutRelationEqual 
     toItem:separatorView
     attribute:NSLayoutAttributeLeft
     multiplier:1.0
     constant:0]];
[constraints addObject:[NSLayoutConstraint constraintWithItem:self.contentView 
     attribute:NSLayoutAttributeRightMargin 
     relatedBy:NSLayoutRelationEqual 
     toItem:separatorView
     attribute:NSLayoutAttributeRight
     multiplier:1.0
     constant:0]];
[self.contentView addConstraints:constraints];
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iOS8 自动布局以编程方式固定到相对布局边距 的相关文章

随机推荐

  • 当 this == null 且 obj == null 时调用 IEquatable.Equals(T obj) 的结果是什么?

    什么应该IEquatable
  • 如何根据子文档对mongodb查询结果进行排序

    我在分数集合 学生 数据库中有 2 个文档 如下所示 mongodb 数据库中 id 2 type newname subs time 20 val b time 12 val a time 30 val c id 1 type strs
  • Docker 容器中的 Alpine linux => `env: 无法执行 'node': 没有这样的文件或目录`

    我正在 Alpine Linux 容器中安装 Node js 版本 8 如下所示 RUN apk add no cache wget RUN wget http nodejs org dist v8 1 1 node v8 1 1 linu
  • WCF数据服务5.6快速入门

    我已经尝试让 WCF 数据服务服务器工作几天了 我今天终于退缩了 只是尝试按照快速启动所示的方式进行操作 没有其他任何事情 并且是在全新的项目中 这当然会起作用 但它没有 它和我的其他测试一样失败了 我只是跟着这个example 使用 Vi
  • 如何将 WPF 富文本框转换为字符串

    我看到了如何设置WPF富文本框在RichTextBox类 但我喜欢像以前一样将其文本保存到数据库中 Windows 窗体 string myData richTextBox Text dbSave myData 我该怎么做 MSDN 底部富
  • jQuery + 可排序 + 实时

    我使用 get 动态地将列表项添加到页面 然后将它们附加到 OL 元素 到目前为止 这很平常 但是当这些新项目加载到页面中时 jQuery 并不知道它们 并且我无法使它们可排序 我用 jQuery Live 做了一些尝试 但没有取得任何进展
  • 最好的开放式 PHP 新闻通讯管理器是什么? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 我正在寻找一个不错的时事通
  • 如何在做其他事情的同时从键盘获取输入?

    我正在使用 C gcc 和 ncurses 来制作一个程序来监视来自串行端口的数据 该计划有一个大while 它读取来自端口的数据 同时在屏幕上打印该信息 但问题就在这里 它如何从我的键盘读取输入 因为getch 冻结程序直到它获得输入 并
  • 如何通过前序和中序遍历构建二叉树

    我正在做一项关于从预序和中序遍历 每个节点中的一个字符 构建二叉树的作业 我试图让我的大脑围绕如何构建实际的树 以下是我关于如何实现这一目标的思考过程 将预序中的第一个条目存储为根节点 在中序中搜索该条目 取出根节点左侧的字符并将其保存为字
  • 禁用手势下拉表单/页面表模式呈现

    在 iOS 13 中 使用表单和页面样式的模式演示可以通过向下平移手势来关闭 这在我的一张表单中是有问题的 因为用户绘制到这个框中会干扰手势 它将屏幕向下拉 而不是绘制垂直线 如何在以工作表形式呈现的模式视图控制器中禁用垂直滑动以消除手势
  • 从 iPhone 到 Mac 编程

    我浏览了该网站以确保这不是重复的 如果我错过了什么 请道歉 我从事 iPhone 开发已经大约一年了 我对 Objective C Xcode 和 Cocoa 至少在 iPhone 上使用的 很满意 但 OS X 的编程似乎更复杂 对于像我
  • 如何从字符串列生成分类的 pandas DataFrame 列?

    我可以将 pandas 字符串列转换为分类列 但是当我尝试将其作为新的 DataFrame 列插入时 它似乎会立即转换回系列 str train LocationNFactor pd Categorical from array train
  • 如何在 JavaScript 中动态创建包含 HTML 实体 (— ... «) 的

    我想将 元素添加到 元素 其中 元素的文本包含 HTML 实体 在 HTML 中 代码如下所示
  • 一个或多个包与 .NETStandard 不兼容,版本=v1.5

    我创建了一个新的 NET Core 类库 并从公司内部 Nuget 服务器添加了一个 Nuget 包 我开始收到以下错误 软件包 XXXX 与 netstandard1 5 不兼容 NET标准 版本 v1 5 套餐 XXXX 1 0 支持
  • 使用 Jquery 动态更改图像 src 在 IE 和 Firefox 中不起作用

    我正在为电子邮件实施验证码 当点击linkEmail按钮电子邮件模式将打开 我必须设置由处理程序 CaptchaGenerator ashx 单击时生成的验证码图像linkEmail按钮点击 这是代码 linkEmail click fun
  • VS Code (OSX) Flutter 热重载不被保存触发

    将 VS Code 版本升级到 1 32 1 后 保存 自动保存不会触发自动热重加载 以前它就像一个魅力 按热重载按钮热重载仍然有效 根据 Flutter doctor 的说法 Flutter 似乎还不错 Doctor summary to
  • NSLayoutConstraints 可以设置动画吗? [复制]

    这个问题在这里已经有答案了 我正在尝试对一些视图进行动画处理 以便它们在横向时被巨大的键盘挡住 如果我只是简单地对框架进行动画处理 效果会很好 但其他人建议这会适得其反 我应该更新 NSLayoutConstraints 然而 它们似乎不可
  • Javascript es6 覆盖静态属性

    尝试 ES6 并尝试创建一个具有静态属性和解析函数的类 然后我想为我正在解析的每种不同类型扩展基本解析器 不确定我是否正在执行反模式 但我无法覆盖静态属性 这是我的基本解析器 class Module static name Default
  • 使用 Python 提取文件名中含有无效字符的文件

    我使用 python 的 zipfile 模块来提取 zip 存档 让我们将此文件放在http img dafont com dl f akvaleir例如 f zipfile ZipFile akvaleir zip r for file
  • iOS8 自动布局以编程方式固定到相对布局边距

    我有一个 UI 元素 UISwitch实际上 但实际上并不重要 它在 Interface Builder 中将前导和尾随空间固定到超级视图 Xcode 6 中的约束如下所示 前导空间的约束实际上是相同的 约束的值为42 0分 这正是我想要的