如何以编程方式使用自动布局将活动指示器定位到其超级视图的中心?

2024-01-12

为什么以下代码无法将活动指示器定位到其超级视图的中心:

UIActivityIndicatorView *activityIndicator = [[UIActivityIndicatorView alloc]
       initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];

[self.mysuperview addSubview:activityIndicator];
[activityIndicator addConstraints:[NSLayoutConstraint 
                   constraintsWithVisualFormat:@"|-(>=20)-[view(==100)]-(>=20)-|"
                   options:NSLayoutFormatAlignAllCenterX | NSLayoutFormatAlignAllCenterY
                   metrics:nil
                   views:@{@"view" : self.mysuperview}]];

活动指示器位于左上角的某个位置,绝对不是中心。

================= 更新: 找到解决方案:我必须在创建指标后关闭自动调整大小约束,然后关闭给定工作的所有解决方案:

 [activityIndicator setTranslatesAutoresizingMaskIntoConstraints:NO];

我在@Vignesh 给出的链接上找到了它,所以我接受他/她的回答。


以下四个 Swift 5 / iOS 12 代码示例展示了如何居中UIActivityIndicatorView在 - 的里面UIView of a UIViewController with 自动布局.

所有样品都会产生相同的结果,但根据您的需求和品味,您可以选择其中之一。

If your UIActivityIndicatorView的超级视图不是self.view,你只需更换每个self.view用你自己的(未包装的)调用superview.


1. NSLayoutConstraint初始化样式

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let indicatorView = UIActivityIndicatorView(style: .gray)
        indicatorView.isHidden = false
        indicatorView.translatesAutoresizingMaskIntoConstraints = false
        self.view.addSubview(indicatorView)

        // Auto layout
        let horizontalConstraint = NSLayoutConstraint(item: indicatorView,
                                                      attribute: .centerX,
                                                      relatedBy: .equal,
                                                      toItem: self.view,
                                                      attribute: .centerX,
                                                      multiplier: 1,
                                                      constant: 0)
        let verticalConstraint = NSLayoutConstraint(item: indicatorView,
                                                    attribute: .centerY,
                                                    relatedBy: .equal,
                                                    toItem: self.view,
                                                    attribute: .centerY,
                                                    multiplier: 1,
                                                    constant: 0)
        NSLayoutConstraint.activate([horizontalConstraint, verticalConstraint])
        /*
         // You can replace NSLayoutConstraint activate(_:) call with the following lines:
         self.view.addConstraint(horizontalConstraint)
         self.view.addConstraint(verticalConstraint)
         */
    }

}

2. UIViewAutoresizing style

Springs 和 Struts 将在运行时转换为相应的自动布局约束。

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let indicatorView = UIActivityIndicatorView(style: .gray)
        indicatorView.isHidden = false
        indicatorView.translatesAutoresizingMaskIntoConstraints = true // default is true
        self.view.addSubview(indicatorView)

        // Springs and struts
        indicatorView.center = CGPoint(x: self.view.bounds.midX, y: self.view.bounds.midY)
        indicatorView.autoresizingMask = [
            .flexibleLeftMargin,
            .flexibleRightMargin,
            .flexibleTopMargin,
            .flexibleBottomMargin
        ]
    }

}

3.视觉格式语言风格

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let indicatorView = UIActivityIndicatorView(style: .gray)
        indicatorView.isHidden = false
        indicatorView.translatesAutoresizingMaskIntoConstraints = false
        self.view.addSubview(indicatorView)

        // Auto layout
        let views = ["superview": self.view!, "indicatorView": indicatorView]
        let horizontalConstraints = NSLayoutConstraint
            .constraints(withVisualFormat: "H:[superview]-(<=0)-[indicatorView]",
                         options: .alignAllCenterY,
                         metrics: nil,
                         views: views)
        let verticalConstraints = NSLayoutConstraint
            .constraints(withVisualFormat: "V:[superview]-(<=0)-[indicatorView]",
                         options: .alignAllCenterX,
                         metrics: nil,
                         views: views)
        self.view.addConstraints(horizontalConstraints)
        self.view.addConstraints(verticalConstraints)
    }

}

4. NSLayoutAnchor风格(需要 iOS 9)

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let indicatorView = UIActivityIndicatorView(style: .gray)
        indicatorView.isHidden = false
        indicatorView.translatesAutoresizingMaskIntoConstraints = false
        self.view.addSubview(indicatorView)

        // Auto layout
        let horizontalConstraint = indicatorView
            .centerXAnchor.constraint(equalTo: self.view.centerXAnchor)
        let verticalConstraint = indicatorView
            .centerYAnchor.constraint(equalTo: self.view.centerYAnchor)
        NSLayoutConstraint.activate([horizontalConstraint, verticalConstraint])
        /*
         // You can replace NSLayoutConstraint activate(_:) call with the following lines:
         self.view.addConstraint(horizontalConstraint)
         self.view.addConstraint(verticalConstraint)
         */
    }

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

如何以编程方式使用自动布局将活动指示器定位到其超级视图的中心? 的相关文章

  • 除非在后台线程中获取新的引用,否则存在潜在的引用计数问题

    我有一个second https stackoverflow com questions 28898966 prefer property accessor or kvc style for accessing core data prop
  • ios Vision VNImageRequestHandler方向问题

    我正在尝试使用相机通过相机检测脸部VNImageRequestHandler iOS 愿景 当我在横向模式下用相机指向照片时 它会检测到面部 但方向模式相反 let detectFaceRequestHandler VNImageReque
  • 我如何从 iPhone 设备获取电子邮件历史记录..?

    friends 我想从我的 iPhone 访问电子邮件历史记录 并且还希望在收到新邮件时收到通知 如果可能的话 请向我提供源代码片段 Thanks 简而言之 使用任何已记录的 API 都是不可能的
  • UITextView:内存使用量巨大

    我在 UITextView 中遇到了内存使用过多的问题 我正在将 50Kb ascii 文本文件加载到 NSString 中 并将其分配给应用程序中空 UITextView 组件的 text 属性 这立即使我的内存占用量增加了 100Mb
  • Google Cloud Messaging 显示成功消息但未发送 iOS

    所以我在使用 Google Cloud Messaging 时遇到了一个非常奇怪的问题 我遇到的问题是它正在成功注册设备 并且当发送消息时我会收到来自 Google 的成功消息 但设备永远不会收到任何消息 我从 GCM 得到的消息是 res
  • 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 将此视为普通链接并且不对其执行任何
  • 如何在 iOS 中将 Firebase 对象持久保存到磁盘?

    看起来Firebase http www firebase comiOS 实现不支持客户端模型的离线缓存 这在实践中意味着 对于需要身份验证的 Firebase 应用程序 您需要首先进行身份验证并等待 Firebase 完成登录 检查用户身
  • iPhone SQLite页面缓存不断增长

    I use sqlite数据库用于存储 还有许多数据库事务 我的问题是 sqlite 页面缓存的内存使用量快速增长 在instruments我可以找到这条线 Graph Category Live Bytes Living Transien
  • 与新 Apple Music 应用程序中相同的动态状态栏

    是否可以动态着色statusBar这是在新的苹果音乐应用程序 Edit iOS 8 4 中的新 Apple Music 应用程序具有此功能 打开应用程序 选择并播放歌曲 状态栏为白色 向下滑动播放器控制器以查看 我的音乐 控制器 它有黑色状
  • Apple Developer 应用程序门户不再可以生成新的 Bundle Seed ID

    iOS 开发者门户中的新界面不再为您的应用程序 ID 提供 生成新的 按钮 取而代之的是 使用团队 ID 这将导致使用相同的种子 ID 任何人都知道为什么要进行更改以及您应该如何使用新的捆绑包种子 ID 随意补一些 不再可能生成新的种子 I
  • 如何使用 Swift 将“完成”按钮添加到 iOS 中的数字键盘?

    它在默认键盘上工作得很好 但我无法让它在数字键盘上工作 有任何想法吗 据我所知 你不能在键盘部分添加 完成 按钮 你应该添加一个inputAccessoryView to the UITextField or UITextView 如果这就
  • 带约束的嵌套集合视图的意外行为 (Swift 4)

    我的表格视图中有一个单元格 其中包含水平分页集合视图 该集合视图的每个页面内都有一个垂直集合视图 为了避免 滚动滚动 问题 我在垂直集合视图中禁用了垂直滚动 垂直集合视图的单元格计数不是静态的 可以是任意数字 因此 这会产生一个问题 集合视
  • 在情节提要中将 Segue 拖至自身

    我想将一个 Segue 从我的视图控制器拖到其自身 所以我可以推送该特定视图控制器的 无限 实例 我知道如何在代码中执行此操作 即以编程方式实例化视图控制器 但是 我想尽可能使用 segues 我发现了一些在故事板中进行自我延续的 技巧 但
  • iOS 如何触发视频退出全屏后继续播放?

    我正在构建一个在 iOS 中播放视频的网站 我有一个在 iOS 中工作的全屏按钮 但是退出全屏时视频会暂停 有谁知道一种方法可以强制视频在退出全屏时继续播放 或者如何设置一个侦听器来触发视频在退出全屏时自动播放 这是我的代码
  • 访问 google reader 的 Endpoints API 时出错

    我正在尝试在iPhone APP中实现google reader 到目前为止我已经成功收到了sid and auth 当我尝试使用以下命令调用 Endpoints API 时 问题就出现了GET 这是代码 ASIHTTPRequest re
  • TTTAttributedLabel 可点击截断标记

    我有一个 TTTAttributedLabel 并为其指定了一个自定义属性截断标记 NSAttributedString atributedTruncationToken NSAttributedString alloc initWithS
  • 带有 allowedEditing 的 UIImagePickerController 不允许平移裁剪

    我在这里看到这个问题 UIImagePicker 允许编辑卡在中心 https stackoverflow com questions 12630155 uiimagepicker allowsediting stuck in center
  • UILabel 中的文本未垂直居中

    我使用以下代码创建了一个标签 func setupValueLabel valueLabel numberOfLines 1 valueLabel font UIFont name Avenir Black size 50 valueLab
  • 下载进度条在 iOS 企业发行版中没有改变进度

    我正在通过企业分发开发和分发 iPad 应用程序 它们下载并执行良好 因此一切正常 Web 链接 ipa 文件 plist 文件 配置 问题 是 当用户单击链接进行下载时 iPad 中显示下载进度的进度条显示 正在等待 但却是空的并且永远不

随机推荐

  • Arduino F()宏的实现

    我试图了解 Arduino 中的 F 宏实际上对 PGMEM 和 RAM 做了什么以及运行时的影响是什么 有人可以指出定义这个宏的文件吗 这可能是旧版本 但定义它的一个地方是Wstring h as in here http andybro
  • 即使 ssh 有效,Gitlab 也无法克隆存储库

    正如标题所述 即使 ssh 似乎可以工作 我也无法从 Gitlab 6 服务器克隆存储库 当尝试克隆时 它看起来像这样 git clone ssh email protected cdn cgi l email protection 133
  • 如何正确删除使用sonata-media-bundle上传的所有图像

    我已经按照建议使用 sonata media bundle 上传了一些图像here http sonata project org bundles media 2 2 doc reference usage html media new M
  • 切换按钮和开关的区别

    切换按钮和开关有什么区别 由于它们提供相同的功能 使用切换按钮或开关的具体用例是什么 切换按钮 Switch 这更多的是一个用户体验问题 而不仅仅是编码问题 这是我的回答 该控件的描述是这样说的 Toggle是一个按钮 sap m Togg
  • 为什么 go.mod 中的所有依赖都是间接的?

    我通过运行以下命令来初始化一个 go 项目 go mod init firstgo app 我确认模块已创建 cat go mod module firstgo app go 1 18 然后我通过执行安装了对 github com gin
  • 如何使用curses在终端中编写三行不断更新的行?

    我有一个程序需要输出三个不断变化的消息 连接数 已用时间和拒绝的连接 我尝试用以下方式写它们 r 在字符串末尾并在其他开始自己的输出循环之前打印换行符 认为回车符会返回一行 但它们最终都在第一行互相覆盖 我见过类似的问题 人们推荐使用cur
  • twitter bootstrap 调整手机屏幕上的文本大小

    我是 Twitter 引导程序的新手 我隐藏了一些 tr 在手机屏幕上的帮助下class hidden phone 但我想调整显示文本的大小以适合屏幕 如何在手机屏幕上调整文本大小 如下所示 span test test test test
  • Collections.unmodifierXXX 方法是否违反 LSP? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 里氏替换原则 http en wikipedia org wiki Liskov substitution principle是原则之一SOLI
  • 将 javascript WebSocket 与 Java ServerSocket 连接

    我正在尝试将 javascript 与 Java 连接起来 但出现一些错误 javascript 端错误 WebSocket connection to wss 127 0 0 1 1234 failed WebSocket opening
  • 通过index.js从文件夹导入

    在我的 React 项目 带有 Webpack 中 我的文件夹结构如下 myfile js Report index js 根据我的research https stackoverflow com a 44092481 1493867 我应
  • Flexbox 可以检测 Flex 项目何时换行吗?

    我希望摆脱媒体查询并仅使用 Flexbox 来解决我的问题 但我不确定这是否可能 随着窗口变小 我希望列缩小 直到达到最小宽度 一旦他们击中了那个 中间的柱子就会跳下来进行换行 我想我的问题可以归结为 flexbox 可以检测到它何时换行吗
  • inotifywait 不执行 bash 脚本中的 while 循环

    我想在 Docker 容器中的目录上放置一个文件观察器 我在用着entrypoint sh脚本来设置放置文件观察器的脚本 设置如下 bin sh Trigger the script with the file watcher in the
  • 如何在phonegap/jquery移动应用程序中使用外部图像

    我正在为 android 开发一个phonegap jquery mobile 测试应用程序 我是这项技术的新手 我想在我的应用程序中显示存储在互联网站点上的图像 在 avd 中的应用程序启动期间 当将此元素放入我的 index html
  • 加载网页时:“# 的未定义方法‘request_uri’”

    我正在尝试使用 Ruby 通过 HTTP 加载网页并检查其状态代码是什么 我的代码如下所示 require net http r Net HTTP get response URI parse myURL return r code 然而
  • 检查输入是否为 int、float 或 bool 的 Python 程序

    所以我试图在这里编写一个程序 要求输入 然后检查输入是否有整数 布尔值或浮点数 如果有这些字符中的任何一个 那么它将再次要求输入 我想做的不仅仅是写作str input 就像用户输入一个int or bool等等它将打印错误并停止程序 这是
  • Rails 4:使用代理模型来组合多个模型

    我正在尝试在轨道上 4 我之前做过一些西纳特拉的作品 我有一个注册表单 用户可以在其中填写他的组织名称 地址和他自己的姓名 密码等 我有两个表 用户和组织 这些表中填充了注册数据 所以 我有两个活动记录模型users and organiz
  • Android 上的蓝牙:StartDiscovery 不起作用。无法扫描设备

    我是android新手 我正在制作一个具有蓝牙功能的应用程序 我可以设置蓝牙适配器 并获取我自己的设备信息 但我无法使用 startdiscovery 来发现蓝牙设备 当我开始扫描时它什么也不做 我正在使用 onclicklistener
  • Paypal结帐返回数据

    我有一个 paypal 按钮 如下所示
  • 仅具有 1 或 2 个可选字段的数据库表...拆分为多个表?

    在我正在设计的数据库中 有一个相当中心的表代表已售出或待售的物品 它区分个人销售 如 eBay 和正规公司的销售 这意味着实际上有 1 个或两个字段并不同样适用于两种情况 例如 一个字段仅在一种情况下使用 另一个字段在一种情况下是可选的 但
  • 如何以编程方式使用自动布局将活动指示器定位到其超级视图的中心?

    为什么以下代码无法将活动指示器定位到其超级视图的中心 UIActivityIndicatorView activityIndicator UIActivityIndicatorView alloc initWithActivityIndic