jjzjj

swift - Xcode 10/iOS 12 不支持 anchor 约束

coder 2023-09-15 原文

昨天在 Xcode 9 和 iOS 11 下一切正常;但是,在更新到 Xcode 10 和 iOS 12 后,该 View 不再显示。我在 View 中显示了一段视频。今天我能听到但看不到视频。我检查了框架,发现它为零,这解释了这个问题。但是,与之前的版本相比没有任何变化。我已经删除了视频内容,并在应用 anchor 约束后查看了 View 的框架,它们都为零。

import UIKit
import AVKit

class VideoView: UIView {

private var videoURL:URL!
private var parentView:UIView!
private var avPlayer:AVPlayer!
private var avPlayerLayer:AVPlayerLayer!

init(url:URL, parentView:UIView) {
    super.init(frame: .zero)

    self.videoURL = url
    self.parentView = parentView

    setup()
}

private func setup() {
    self.translatesAutoresizingMaskIntoConstraints = false
    self.parentView.addSubview(self)

    self.topAnchor.constraint(equalTo: self.parentView.safeAreaLayoutGuide.topAnchor, constant: 10).isActive = true
    self.leadingAnchor.constraint(equalTo: self.parentView.leadingAnchor, constant: 8).isActive = true
    self.trailingAnchor.constraint(equalTo: self.parentView.trailingAnchor, constant: -8).isActive = true
    self.heightAnchor.constraint(equalToConstant: 200).isActive = true

    print(self.parentView.frame)
    print(self.frame)
}


override init(frame: CGRect) {
    super.init(frame: frame)
}

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
}
}

注意 setup() 末尾的两个打印语句。 parentView 返回 0,0,414,736self View 返回 0,0,0,0

如果在 Init 中我设置了帧大小,它会遵守它;但是,它不应用 anchor 约束,因此 View 的大小将保持不变,无论我放入 init 中是什么。

似乎根本没有考虑 anchor 约束。调试器中没有关于它们的错误,正如我们所见,translatesAutoresizingMaskIntoConstraints 设置为 false 并且所有约束的 isActive 设置为

只有 Xcode 和 iOS 版本发生了变化。我错过了什么?

更新 1:

如果我创建一个标签并将其添加到 self,该标签显示正常。如果我为 self 创建背景颜色,它也显示正常,包括使用 anchor 约束设置的适当高度。但是,框架保持为零。因此,当尝试通过将其框架设置为 self 的边界来添加 AVPlayerLayer 时,它不起作用,因为 self 当然保持为零。所以问题仍然是为什么框架的尺寸在初始化后没有改变。

更新 2:

我在应用 anchor 约束后添加了一个 self.layoutIfNeeded(),这似乎已经解决了这个问题。虽然查看 self 的框架并且我得到 -199,-100,398,200 不能说我理解 X 和 Y 的值。尽管如此,layOutIfNeeded 似乎已经解决了这个问题,尽管为什么在 Xcode 10/iOS 12 中需要这样做也是一个谜。

最佳答案

我在第二次更新中发布了似乎是答案的内容,但为了清楚起见:

我在应用 anchor 约束后添加了一个 self.layoutIfNeeded(),这似乎已经解决了这个问题。尽管查看自己的框架并得到 -199,-100,398,200 不能说我理解 X 和 Y 的值。尽管如此,layOutIfNeeded 似乎已经解决了这个问题,尽管为什么在 Xcode 10/iOS 12 中需要这样做也是一个谜。

关于swift - Xcode 10/iOS 12 不支持 anchor 约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52397203/

有关swift - Xcode 10/iOS 12 不支持 anchor 约束的更多相关文章

  1. ruby - 如何在 Lion 上安装 Xcode 4.6,需要用 RVM 升级 ruby - 2

    我实际上是在尝试使用RVM在我的OSX10.7.5上更新ruby,并在输入以下命令后:rvminstallruby我得到了以下回复:Searchingforbinaryrubies,thismighttakesometime.Checkingrequirementsforosx.Installingrequirementsforosx.Updatingsystem.......Errorrunning'requirements_osx_brew_update_systemruby-2.0.0-p247',pleaseread/Users/username/.rvm/log/138121

  2. ruby - 如何验证 IO.copy_stream 是否成功 - 2

    这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下

  3. Ruby 文件 IO 定界符? - 2

    我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的

  4. Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting - 2

    1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里

  5. python - 是否可以使用 Ruby 或 Python 禁用 anchor /引用来发出有效的 YAML? - 2

    是否可以在PyYAML或Ruby的Psych引擎中禁用创建anchor和引用(并有效地显式列出冗余数据)?也许我在网上搜索时遗漏了一些东西,但在Psych中似乎没有太多可用的选项,而且我也无法确定PyYAML是否允许这样做.基本原理是我必须序列化一些数据并将其以可读的形式传递给一个不是真正的技术同事进行手动验证。有些数据是多余的,但我需要以最明确的方式列出它们以提高可读性(anchor和引用是提高效率的好概念,但不是人类可读性)。Ruby和Python是我选择的工具,但如果有其他一些相当简单的方法来“展开”YAML文档,它可能就可以了。 最佳答案

  6. ruby - 为什么不能使用类IO的实例方法noecho? - 2

    print"Enteryourpassword:"pass=STDIN.noecho(&:gets)puts"Yourpasswordis#{pass}!"输出:Enteryourpassword:input.rb:2:in`':undefinedmethod`noecho'for#>(NoMethodError) 最佳答案 一开始require'io/console'后来的Ruby1.9.3 关于ruby-为什么不能使用类IO的实例方法noecho?,我们在StackOverflow上

  7. 由于 libgmp.10.dylib 的问题,Ruby 2.2.0 无法运行 - 2

    我刚刚安装了带有RVM的Ruby2.2.0,并尝试使用它得到了这个:$rvmuse2.2.0--defaultUsing/Users/brandon/.rvm/gems/ruby-2.2.0dyld:Librarynotloaded:/usr/local/lib/libgmp.10.dylibReferencedfrom:/Users/brandon/.rvm/rubies/ruby-2.2.0/bin/rubyReason:Incompatiblelibraryversion:rubyrequiresversion13.0.0orlater,butlibgmp.10.dylibpro

  8. ruby - ri 有空文件 – Ubuntu 11.10, Ruby 1.9 - 2

    我正在运行Ubuntu11.10并像这样安装Ruby1.9:$sudoapt-getinstallruby1.9rubygems一切都运行良好,但ri似乎有空文档。ri告诉我文档是空的,我必须安装它们。我执行此操作是因为我读到它会有所帮助:$rdoc--all--ri现在,当我尝试打开任何文档时:$riArrayNothingknownaboutArray我搜索的其他所有内容都是一样的。 最佳答案 这个呢?apt-getinstallri1.8编辑或者试试这个:(非rvm)geminstallrdocrdoc-datardoc-da

  9. ruby-on-rails - gem install rmagick -v 2.13.1 错误 Failed to build gem native extension on Mac OS 10.9.1 - 2

    我已经通过提供MagickWand.h的路径尝试了一切,我安装了命令工具。谁能帮帮我?$geminstallrmagick-v2.13.1Buildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingrmagick:ERROR:Failedtobuildgemnativeextension./Users/ghazanfarali/.rvm/rubies/ruby-1.8.7-p357/bin/rubyextconf.rbcheckingforRubyversion>=1.8.5...yescheckingfor/

  10. ruby - 安装 tiny_tds 在 mac os 10.10.5 上出现错误 - 2

    我正在使用macos,我想使用ruby​​驱动程序连接到sqlserver。我想使用tiny_tds,但它给出了缺少free_tds的错误,但它已经安装了。怎么能过这个?~brewinstallfreetdsWarning:freetds-0.91.112alreadyinstalled~sudogeminstalltiny_tdsBuildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingtiny_tds:ERROR:Failedtobuildgemnativeextension.完整日志如下:/System

随机推荐