使用自动布局检索子视图的正确位置

2024-01-01

我想以编程方式将视图放置在故事板中创建的所有子视图的中心。

在故事板中,我有一个视图,在一个垂直 StackView 内部,它具有填充全屏的约束,分布“等间距”。 在垂直堆栈视图内部,我有 3 个水平堆栈视图,约束高度 = 100,超级视图的尾随和前导空格:0。分布也是“等间距”。 在每个水平堆栈视图中,我有两个视图,约束宽度和高度 = 100,视图为红色。

So far, so good, I have the interface I wanted, enter image description here

现在我想检索每个红色视图的中心,在该位置放置另一个视图(事实上,它将是棋盘上的棋子......)

所以我写道:

import UIKit

class ViewController: UIViewController {

@IBOutlet weak var verticalStackView:UIStackView?

override func viewDidLoad() {
    super.viewDidLoad()
    print ("viewDidLoad")
    printPos()
}

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    print ("viewWillAppear")
    printPos()
}

override func viewWillLayoutSubviews() {
    super.viewWillLayoutSubviews()
    print ("viewWillLayoutSubviews")
    printPos()
}

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    print ("viewDidLayoutSubviews")
    printPos()
}

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    print ("viewDidAppear")
    printPos()
    addViews()
}


func printPos() {
    guard let verticalSV = verticalStackView else { return }
    for horizontalSV in verticalSV.subviews {
        for view in horizontalSV.subviews {
            let center = view.convert(view.center, to:nil)
            print(" - \(center)")
        }
    }
}

func addViews() {
    guard let verticalSV = verticalStackView else { return }
    for horizontalSV in verticalSV.subviews {
        for redView in horizontalSV.subviews {
            let redCenter = redView.convert(redView.center, to:self.view)
            let newView = UIView(frame: CGRect(x:0, y:0, width:50, height:50))
            //newView.center = redCenter
            newView.center.x = 35 + redCenter.x / 2
            newView.center.y = redCenter.y
            newView.backgroundColor = .black
            self.view.addSubview(newView)
        }
    }
}

}

这样,我可以看到在 ViewDidLoad 和 ViewWillAppear 中,指标是故事板的指标。然后,位置在 viewWillLayoutSubviews、viewDidLayoutSubviews 和 viewDidAppear 中发生变化。

在 viewDidAppear 之后(所以在所有视图都就位之后),我必须将 x 坐标除以 2 并添加类似 35 的值(参见代码)以使新的黑色视图正确居中于红色视图的中心。我不明白为什么我不能简单地使用红色视图的中心......为什么它适用于 y 位置?


我发现你的问题,更换

let redCenter = redView.convert(redView.center, to:self.view)

with

let redCenter = horizontalSV.convert(redView.center, to: self.view)

转换的时候,要从视图原始坐标进行转换,这里是horizo​​ntalSv

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用自动布局检索子视图的正确位置 的相关文章

  • 如何在 NSDate 变量中仅设置时间?

    我有 NSDate 变量 只想更改时间 不应更改日期 是否可以 例如 用户在 DatePicker 日期中选择日期间隔 如果是开始日期 我想将时间设置为 00 00 00 如果是结束日期 我将时间设置为 23 59 59 感谢你的帮助 问候
  • 无法安装企业应用程序 - 此配置文件无法安装在此设备上

    我正在设置 Jenkins 来构建应用程序的企业版本 以便在我们的内部应用程序商店中分发 如果我将应用程序存档在 Xcode 中 然后在手机上下载内置的 ipa 则应用程序安装不会出现任何问题 但是当我使用 Jenkins 生成的具有相同私
  • 有没有办法阻止 iOS 上的 Safari 在关闭时清除网站的 cookie?

    我的移动网络应用程序的一位用户抱怨说 每次他关闭手机屏幕后使用该应用程序时 他都必须重新登录该应用程序 发生的情况是 当屏幕关闭时 或者当您通过双击主页按钮并滑开 Safari 来完全关闭 Safari 时 Safari 会清除该网站的 C
  • NSOperation 中委托的使用

    我正在尝试利用CLLocationManager in an NSOperation 作为其中的一部分 我需要能够startUpdatingLocation然后等到收到 CLLocation 后才完成操作 目前我已经完成了以下操作 但是委托
  • iOS 解析如何通过 URL 下载文件

    我正在将 parse 用于我的聊天应用程序 当我上传文件时 我保留该 url 并将该 url 发送给其他用户 然后其他用户可以通过该 URL 下载文件 这是我上传文件的代码 void uploadBlob NSData blob fileN
  • 使用 UIKeyCommand 检测删除键

    任何人都知道如何使用检测 删除 键UIKeyCommand在 iOS 7 上 当人们在使用 Swift 时遇到问题时 我认为用 Objective C 和 Swift 编写一个小型的 完整的例子可能是一个很好的答案 请注意 Swift 没有
  • Swift:无法为“[UIViewController]”类型的值添加下标?

    我试图弄清楚如何在 Xcode 7 iOS9 上的 Swift 中解决此问题 并且我也遇到此错误 无法为 UIViewController 类型的值添加下标 索引类型为 Int 任何建议表示赞赏 谢谢 My code func indexP
  • AFNetworking 上传图片

    我看过一些例子 但我认为我的问题可能出在 PHP 中 我正在尝试使用 AFNetworking 将图像从 iPhone 上传到服务器 这是我的 obj c 代码 IBAction uploadButtonClicked id sender
  • 如何将 UIImageView 裁剪为自定义形状

    用户是否可以在该位周围画一条虚线 圆圈 UIImageView他们希望裁剪到 然后为UIImageView调整大小到这些点 这有点像 Photoshop 中的套索 选取框效果 更新 从 iOS 8 x 开始 UIImageView 提供了m
  • ShareKit + Facebook 身份验证不起作用

    我正在使用 ShareKit 从我正在开发的 PhoneGap 应用程序发布到 Facebook 我在 Facebook 中创建了该应用程序 并在我的项目中安装了该插件 Twitter 工作正常 但当我尝试在 Facebook 上分享时出现
  • 如何修复 ReactiveCocoa(带有 CocoaPods)的安装?

    这里是新手 尝试将 ReactiveCocoa 2 2 4 和 CocoaPods 安装到项目中 但在运行时遇到错误 我用过github 上的这个 podspec https github com CocoaPods Specs blob
  • PhoneGap 1.4 封装 Sencha Touch 2.X - 性能怎么样?

    我正在构建一个多平台平板电脑应用程序 仅使用其 Webview 使用 Phonegap 1 4 对其进行包装 然后使用 Sencha Touch 2 框架发挥我的魔力 我所说的多平台是指 iOS 5 X 和 Android 3 0 目前 到
  • 使用prepareForSegue传递数据

    我试图将数据从viewController 1传递到viewController2 我有2个按钮和1个segue 因此有一个segue标识符 这2个按钮 按下时每个按钮应显示 1个标签用于显示标题 1个textView用于显示定义 我很难显
  • 我如何从 iPhone 设备获取电子邮件历史记录..?

    friends 我想从我的 iPhone 访问电子邮件历史记录 并且还希望在收到新邮件时收到通知 如果可能的话 请向我提供源代码片段 Thanks 简而言之 使用任何已记录的 API 都是不可能的
  • 如何从 Firebase 同步检索数据?

    我有两个集合 即用户和问题 根据使用 userId 登录的用户 我检索currQuestion价值来自users收藏 基于currQuestion值 我需要检索question来自 Firebase 的文档Questions收藏 我使用下面
  • CustomNSError 协议有什么作用以及为什么我应该采用它?

    什么是CustomNSError协议的用途以及为什么我应该采用它 Apple提供的文档仅指出 描述错误类型 具体提供域 代码和 用户信息字典 我已经在谷歌上搜索过 但找不到与我的问题相关的任何内容 每种类型都符合Error协议是隐含地桥接的
  • 快速钥匙串更新只有在第二次尝试时才起作用

    您好 我在更新存储在钥匙串中的登录信息方面遇到了 iOS 钥匙串的一个非常奇怪的问题 因此 如果没有保存的凭据 则正确运行保存函数会保存登录信息 如果登录信息已存在并且用户更新了密码 则更新功能仅正确更新密码 但是 如果登录信息存在并且我尝
  • 来自索引范围 Swift 的新数组

    我怎样才能做这样的事情 从数组中取出前 n 个元素 newNumbers numbers 0 n 目前出现以下错误 error could not find an overload for subscript that accepts th
  • iOS 13 检查 CLLocationManager 的临时授权状态

    根据 WWDC 视频 https developer apple com videos play wwdc2019 705 https developer apple com videos play wwdc2019 705 当你要求 Al
  • iOS WKWebView 处理文件下载

    我面临以下问题 在 Web 界面中 文件下载是通过锚标记触发的 如下所示 a href bla blabla a 虽然 Safari 浏览器可以处理此请求并打开一个对话框来处理文件 但 WKWebView 将此视为普通链接并且不对其执行任何

随机推荐

  • 如何在预定时间运行 PHP 脚本

    我需要每天在预定时间运行 php 脚本来更新数据库中的一些字段并发送自动电子邮件 我怎样才能做到这一点 是否可以在 XAMP 服务器中编写一些服务以每天在预定时间运行脚本 我不知道如何更新数据库并在预定时间自动发送电子邮件 任何人都可以分享
  • gayi 未定义 - Google 登录问题与gapi.auth2.init

    我正在尝试实施 Google Sign In 并检索用户的个人资料信息 错误是 Uncaught ReferenceError gapi未定义 这是为什么
  • KnockoutJS 选择选项和选定值

    类似的问题如 选择元素的初始值 https stackoverflow com questions 7516089 knockoutjs select initial value 我在设置选择元素的初始值时遇到问题 我基本上有一个从服务器传
  • 为什么我们在使用 JSF Web 应用程序时需要 beans.xml?

    在学习了一段时间 JSP 和 Servlet 之后 我开始使用 JSF 进行 Web 开发 当您创建 JSF Web 应用程序时 您总是 可能经常 但我不确定是否总是 必须创建 beans xml 并且您不需要在其中编写任何内容 但是 如果
  • php 文件上传错误 1 ​​- 使用 php_ini 的正确方法是什么?

    我在将 pdf 上传到服务器时遇到问题 upload max filesize 为 2M 文件大于此值 约为 4M 我在这里发现了一个与我的问题类似的帖子 即使 upload max size 大于文件大小 FILE 上传大文件也会出现错误
  • 如何远程关闭 Java RMI 服务器

    我有一个非常简单的 Java RMI 服务器 如下所示 import java rmi import java rmi server public class CalculatorImpl extends UnicastRemoteObje
  • C++ 算术提升标头的用途

    我一直在使用一组模板来确定 C 中给定两种基本类型的正确提升类型 这个想法是 如果您定义自定义数字模板 您可以使用它们来确定返回类型 例如基于传递给模板的类的operator 函数 例如 Custom numeric class templ
  • 如何创建多维数组?

    我想创建具有级别 组和项目的多维数组 为什么不创建自定义对象的数组 class A int t int b List a test new ArrayList a test add new A a a
  • 理解 phpcurl_multi_exec

    我试图理解curl multi exec 我在这里复制了一部分手动示例 所以我想知道它是如何工作的 我猜第一个循环发送http请求 但随后是一个循环内的循环 使用带有看似未记录的标志的函数 我想并行下载 70 个网址 http www ph
  • 何时使用函数式 setState

    在过去的几天里 我一直在学习 React 查看了一些关于编写不同元素的不同方式的教程和解释 不过 有一个我一直很好奇的 setState更新 覆盖函数state组件的属性 例如 假设我有一个包含以下内容的课程 class Photos ex
  • RxJs switchMap 与 Angular HttpClient

    我有一个用例 每当触发新请求时 任何已经在进行中的 http 请求都应该被取消 忽略 For eg 当请求 1 响应时间太长 网络连接速度变慢时 会出现请求 例如 2 在这种情况下 2 从服务器获得非常快的响应 即使 1 返回 HTTP 响
  • 如何以 REST方式返回随机项?

    我的设计公开了两种资源 Images Tags 我希望客户能够通过他们的标签请求随机图像 例如 给我标记有 纽约 和 冬天 的随机图像 在这种情况下 RESTful 设计会是什么样子 为了总结评论中的所有讨论 并且不改变我最初的建议 这就是
  • php静态方法问题

    这两段代码有什么区别 class something static function doit echo hello world something doit 和相同但没有 static 关键字 class something functi
  • 如何设置网格视图列的高度?

    我是flutter新手 没有太多经验 我正在尝试使用 flutter 开发一个 android 应用程序 这是我以前的应用程序设计 我还能够成功地在颤动中制作网格视图 但列高是问题所在 他们中的任何人都可以帮助我解决我的颤振代码吗 clas
  • Hadoop 2.4.1 和适用于 Hadoop 的 Google Cloud Storage 连接器

    我正在尝试使用 Google 的 Cloud Storage Connector for Hadoop 在 Hadoop 上运行 Oryx https cloud google com hadoop google cloud storage
  • 如何通过jquery隐藏没有id/class的div?

    如何使用 jQuery 隐藏第一个 第二个 div Div 无法获取 id class div p ssssssss p div div p ttttttttt gt p div div p fffff p div 隐藏第一个 div 元素
  • Form1_KeyDown 不起作用

    private void Form1 KeyDown object sender KeyEventArgs e if listBox1 Items Contains e KeyCode listBox1 Items Remove e Key
  • 在 C++ 中添加双精度数和复数

    考虑一下这段代码 include
  • 通过使用网格视图中的图像按钮在代码隐藏中调用函数

    我有一个ImageButton在一个GridView在 aspx 上clicking this ImageButton我必须调用一个函数 这就是我尝试的方法 但该函数没有被调用 aspx页面内的代码
  • 使用自动布局检索子视图的正确位置

    我想以编程方式将视图放置在故事板中创建的所有子视图的中心 在故事板中 我有一个视图 在一个垂直 StackView 内部 它具有填充全屏的约束 分布 等间距 在垂直堆栈视图内部 我有 3 个水平堆栈视图 约束高度 100 超级视图的尾随和前