以编程方式在 Swift 中实现尾随和前导约束 (NSLayoutConstraints)

2024-06-28

我正在从 xib 添加一个视图到我的 ViewController 中。然后我将其限制真正适合它

override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(animated)
    ...
    ...
    view!.addSubview(gamePreview)
    gamePreview.translatesAutoresizingMaskIntoConstraints = false
    if #available(iOS 9.0, *) {
        // Pin the leading edge of myView to the margin's leading edge
        gamePreview.leadingAnchor.constraintEqualToAnchor(view.leadingAnchor).active = true
        //Pin the trailing edge of myView to the margin's trailing edge
        gamePreview.trailingAnchor.constraintEqualToAnchor(view.trailingAnchor).active = true

    } else {
        // Fallback on earlier versions
        view.addConstraint(NSLayoutConstraint(item: gamePreview, attribute: .TrailingMargin, relatedBy: .Equal, toItem: view, attribute: .TrailingMargin, multiplier: 1, constant: 0))

        view.addConstraint(NSLayoutConstraint(item: gamePreview, attribute: .LeadingMargin, relatedBy: .Equal, toItem: view, attribute: .LeadingMargin, multiplier: 1, constant: 0))
    }
    view.addConstraint(NSLayoutConstraint(item: gamePreview, attribute: .Top, relatedBy: .Equal, toItem: self.topLayoutGuide, attribute: .Bottom, multiplier: 1, constant: 0))
    view.addConstraint(NSLayoutConstraint(item: gamePreview, attribute: .Height, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute,multiplier: 1, constant: 131))
}

我想做的事情:为了真正适合我的视图,将其限制在 ViewController 视图的顶部、前导、尾随,并具有前缀高度。我添加到主视图的视图有自己的透明背景视图,因此不需要边距(该视图意味着设备的宽度大小,所以)。

我已经用 if 放置了两对应该相等的行(在我的尝试中),因为 if 中的前两行实际上仅在 iOS9> 中可用,而我正在尝试做同样的事情在 else 语句中,对于每个设备(从 iOS 8 开始)。

这就是我得到的:

左边是 iOS9+,右边是 iOS8+。透明背景被涂成红色以显示发生的情况(不要介意图像中的不同高度,它们在应用程序中的高度相等,而是查看左侧和右侧添加的边距)

我也尝试过AutoLayoutDSL-Swift,但没有帮助,我不是这方面的专家,但每次尝试只会让事情变得更糟。

如何使用经典的 NSLayoutConstraints 方法编写这些约束,以及如何使用 AutoLayoutDSL 或其分支等框架以更好的方式编写所有内容? (或者替代方案,尽管现在我主要关心官方库)


您需要使用leading and trailing属性,而不是leadingMargin and trailingMargin属性:

override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(animated)
    ...
    ...
    view!.addSubview(gamePreview)
    gamePreview.translatesAutoresizingMaskIntoConstraints = false

    view.addConstraint(NSLayoutConstraint(item: gamePreview, attribute: .Trailing, relatedBy: .Equal, toItem: view, attribute: .Trailing, multiplier: 1, constant: 0))            
    view.addConstraint(NSLayoutConstraint(item: gamePreview, attribute: .Leading, relatedBy: .Equal, toItem: view, attribute: .Leading, multiplier: 1, constant: 0))

    view.addConstraint(NSLayoutConstraint(item: gamePreview, attribute: .Top, relatedBy: .Equal, toItem: self.topLayoutGuide, attribute: .Bottom, multiplier: 1, constant: 0))
    view.addConstraint(NSLayoutConstraint(item: gamePreview, attribute: .Height, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute,multiplier: 1, constant: 131))
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

以编程方式在 Swift 中实现尾随和前导约束 (NSLayoutConstraints) 的相关文章

随机推荐

  • GWT - Intellij IDEA 中 GWT 的优秀 GUI 编辑器是什么?

    IDEA 附带的工具只不过是一个 GWT 项目创建工具 有更好的插件吗 GWT 有独立的 GUI 编辑器吗 直接回答你的问题 目前还没有适用于 GWT 的 Intellij IDEA GUI WYSIWYG 编辑器 GWT 最受欢迎 功能完
  • Django:在视图中访问时,settings.py 中的重音字符被破坏

    我在 settings py 中有重音字符 我使用 getattr settings MY CONSTANT NAME 在视图中访问这些字符 但 getattr 调用返回损坏的字符 例如 变为 xc3 xb4 这是 view py 中的代码
  • 多步算法的设计模式

    我正在编写一个控制台应用程序 该应用程序执行包含 N 个步骤的算法 这一步很重要N在步骤之前正确完成N 1被执行 否则程序应该停止工作并显示错误消息 我可以用嵌套来做到这一点if当然和用途的陈述try catch finally 在fina
  • Jquery:将rel属性添加到某个类的所有
  • 标签内的标签
  • 我正在尝试添加一个rel lightframe 归因于我的所有 编辑 链接admin links node edit class li class admin links node edit a href link title Edit E
  • 刷新电量查询VBA

    因此 我使用下面的代码来刷新我的查询连接 但是 如果由于 wtv 原因刷新失败 如何显示消息 因为此 VBA 显示刷新已完成 即使我的查询存在多个错误 Worksheets Details Unprotect Dim Connection
  • 编译器优化 - 函数没有地址

    我没有使用太多指向成员函数的指针 但我认为在使用此类指针时发现了一些危险的情况 当编译器由于某些优化而决定不为函数分配地址时 就会出现问题 VS 2015 即使在调试 x86 中也会发生这种情况 禁用优化 Od 我正在重构一个旧系统 将一些
  • 如何在线性布局周围添加边框(底部除外)?

    如何在线性布局周围添加边框 底部除外 LinearLayout 需要在左侧 顶部和右侧有边框 但底部不需要 在drawable文件夹中创建一个名为border xml的XML文件 并将以下代码放入其中
  • 如何删除警告:link.res包含输出部分;你忘了-T吗?

    我正在使用 fpc 编译器 我想删除此警告 我已经阅读了 fpc 的选项 但我找不到如何做到这一点 这可能吗 当我运行命令时出现 fpc foo pas out 目标操作系统 Linux for i386 编译 foo pas 链接 p2
  • zurb 基金会是否可以拥有完整的行宽度

    我正在使用 Foundation 3 构建响应式网站 但我想让页脚和导航背景宽度占据整个宽度 我将我的行命名为 class row navigation class row footer 我尝试寻找如何解决这个问题 但我没有选择 我假设这是
  • 如何使用 pip 安装 Openpyxl

    我有 Windows 10 64 位 我想利用Openpyxl包开始学习如何与 Excel 和其他电子表格交互 我安装了Python windowsx86 64web basedinstaller 我有 64 位操作系统 尝试安装此版本时我
  • Helm 安装未知标志 --name

    当我尝试使用 helm 安装图表时 helm install stable nginx ingress name my nginx 我收到错误 错误 未知标志 name 但我在很多文档中都看到了上面的命令格式 版本 version Buil
  • IntelliJ 的 javafx 集成场景生成器在 Oracle JDK 12 中无法工作

    我正在运行 Arch Linux 安装了最新的 IntelliJ 包以及 Oracle 的 JDK12 项目使用的 和 Gluon 的场景生成器 场景生成器的路径已正确设置 场景生成器独立工作 也是从 IntelliJ 启动时 我右键单击我
  • 房间数据库:插入的ID始终为0

    我正在尝试创建列表项的房间数据库 我在这里遵循这个例子 https medium com mindorks room kotlin android architecture components 71cad5a1bb35 https med
  • Spring 排序的 beans 列表

    我有几个实现相同接口的 bean 每个 bean 都注释有 Component Order SORT ORDER public class MyClass implements BeanInterface 有一次 我自动装配了一个组件列表
  • EventMachine 的优势是什么

    这是我的测试用例 我发现EM并不比一般的TCP服务器快 EM 服务器 require rubygems require benchmark require eventmachine class Handler lt EventMachine
  • 断点在 xcode pod 文件中不起作用

    我有一个 xcode 项目 其中包含一些可可豆荚文件 当我在 cocoa pod 文件中放置断点时 调试器不会在这些断点处停止 为什么 有人对此有什么想法吗 我关注了 UdaySingh 的评论 它起作用了 我不确定他为什么没有发布答案 但
  • 基于百分比的路由算法

    四处浏览基于百分比的路由 偶然发现这个线程 https stackoverflow com a 52044571 3154233 根据建议的算法如下 对于给定模型如下 public class Host private String nam
  • 动态加载内容脚本(chrome扩展)

    我有一个 chrome 扩展 其中有 2 个由清单注入的内容脚本和一个后台脚本 manifest version 2 name Test permissions tabs
  • 假装下载文件

    我试图找到一种简单的方法来使用 Feign 下载 csv 文件 保留文件名 最简单 最干净的方法是什么 feign form github 页面上的多部分解决方案非常冗长 并且不适合我 任何帮助表示赞赏 假冒客户 import feign
  • 以编程方式在 Swift 中实现尾随和前导约束 (NSLayoutConstraints)

    我正在从 xib 添加一个视图到我的 ViewController 中 然后我将其限制真正适合它 override func viewDidAppear animated Bool super viewDidAppear animated