草庐IT

ios - 在 scaleAspectFit 之后调整 UIImageView 框架的大小

coder 2023-09-11 原文

我在 IB 中创建了一个内容模式为 Aspect Fit 的 UIImageView。然后我从 URL 将大图像加载到该 View 。

@IBOutlet weak var pictureView: UIImageView!

NSURLSession.sharedSession().dataTaskWithURL(url, completionHandler: { (data, _, error) -> Void in
guard let data = data where error == nil,
      let image = UIImage(data: data)
      else {
           print(error?.localizedDescription)
           return
}

pictureView.image = image
pictureView.clipsToBounds = true
setNeedsLayout()
layoutIfNeeded()

}).resume()

图像加载到 UIImageView 中,Aspect Fit 会正确调整图像的大小以将其全部显示在框架中,但是 UIImageView 的框架设置为原始大图像的大小。我有这个巨大的框架包裹着这个较小的调整大小的图像。我需要 UIImageView 框架来紧紧包裹 Aspect Fit UIImage,摆脱所有其他格式。

我是否需要以某种方式为 UIImageView 手动计算新的帧大小,或者我是否缺少某处设置?

编辑:

我还尝试了以下方法来调整图像周围 UIImageView 框架的大小:

pictureView.frame = AVMakeRectWithAspectRatioInsideRect(picture.size, pictureView.frame)

和...

pictureView.frame = CGRectMake(self.pictureView.frame.origin.x, self.pictureView.frame.origin.y, pictureImage.size.width, pictureImage.size.height)

我也尝试过压缩阻力设置。

最佳答案

好吧,这涉及到一些事情。

依赖关系:

1) 图片大小。如果图像的高宽比不大于或等于 ImageView 的高宽比,则会显示黑色空间,因为与 ImageView 匹配的比例会变小。

2) 我不确定你的 imageView 的约束,因为我可以看到它是一个 @IBOutlet。

我对你的句子感到困惑“但是 UIImageView 的框架设置为原始大图像的大小。我有这个巨大的框架包裹着这个较小的调整大小的图像。”

我相信您想要做的是将图像设置到 imageView 中,但似乎您是将 UIImageView 设置为图像大小,然后将图像设置为 UIImageView,这使得调试起来非常困惑。你能更详细地解释一下你想要发生什么吗?

编辑

有一个带框架的 ImageView——这个框架永远不会不同。

contentMode 将改变图像在 imageView 上的显示方式

UIViewContentModeScaleAspectFitUIViewContentModeScaleAspectFill 模式缩放图像以适应或填充空间,同时保持图像的原始纵横比。

UIViewContentModeScaleToFill 值在不考虑原始纵横比的情况下缩放图像,这会导致图像出现扭曲。

UIViewContentModeScaleToFill 如果需要,可以通过更改内容的纵横比来缩放内容以适应自身大小的选项。 *(在大多数情况下不推荐)

UIViewContentModeScaleAspectFit 通过保持纵横比来缩放内容以适应 View 大小的选项。 View 边界的任何剩余区域都是透明的。 *(这保证了整个图像适合屏幕。所以如果图像的比例小于屏幕,那么在某些边缘,顶部/底部或左侧/右侧会有黑色)

UIViewContentModeScaleAspectFill 缩放内容以填充 View 大小的选项。内容的某些部分可能会被裁剪以填充 View 的边界。 *(这个保证全图都拍了)

关于ios - 在 scaleAspectFit 之后调整 UIImageView 框架的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38032429/

有关ios - 在 scaleAspectFit 之后调整 UIImageView 框架的大小的更多相关文章

  1. ruby-on-rails - 在 Rails 中将文件大小字符串转换为等效千字节 - 2

    我的目标是转换表单输入,例如“100兆字节”或“1GB”,并将其转换为我可以存储在数据库中的文件大小(以千字节为单位)。目前,我有这个:defquota_convert@regex=/([0-9]+)(.*)s/@sizes=%w{kilobytemegabytegigabyte}m=self.quota.match(@regex)if@sizes.include?m[2]eval("self.quota=#{m[1]}.#{m[2]}")endend这有效,但前提是输入是倍数(“gigabytes”,而不是“gigabyte”)并且由于使用了eval看起来疯狂不安全。所以,功能正常,

  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. TimeSformer:抛弃CNN的Transformer视频理解框架 - 2

    Transformers开始在视频识别领域的“猪突猛进”,各种改进和魔改层出不穷。由此作者将开启VideoTransformer系列的讲解,本篇主要介绍了FBAI团队的TimeSformer,这也是第一篇使用纯Transformer结构在视频识别上的文章。如果觉得有用,就请点赞、收藏、关注!paper:https://arxiv.org/abs/2102.05095code(offical):https://github.com/facebookresearch/TimeSformeraccept:ICML2021author:FacebookAI一、前言Transformers(VIT)在图

  6. HBase Region 简介和建议数量&大小 - 2

    Region是HBase数据管理的基本单位,region有一点像关系型数据的分区。region中存储这用户的真实数据,而为了管理这些数据,HBase使用了RegionSever来管理region。Region的结构hbaseregion的大小设置默认情况下,每个Table起初只有一个Region,随着数据的不断写入,Region会自动进行拆分。刚拆分时,两个子Region都位于当前的RegionServer,但处于负载均衡的考虑,HMaster有可能会将某个Region转移给其他的RegionServer。RegionSplit时机:当1个region中的某个Store下所有StoreFile

  7. ruby-on-rails - Ruby 中意外的大小写行为 - 2

    我在一段非常简单的代码(如我所想)中得到了一个错误的值:org=4caseorgwhenorg=4val='H'endputsval=>nil请不要生气,我希望我错过了一些非常明显的东西,但我真的想不通。谢谢。 最佳答案 这是典型的Ruby错误。case有两种被调用的方法,一种是你传递一个东西作为分支的基础,另一种是你不传递的东西。如果您确实在case中指定了一个表达式语句然后评估所有其他条件并与===进行比较.在这种情况下org评估为false和org===false显然不是真的。所有其他情况也是如此,它们要么是真的,要么是假的。

  8. ruby - 改变替换的大小写 - 2

    我有以下内容:text.gsub(/(lower)(upper)/,'\1\2')我可以将\2替换为大写吗?类似于:sed-e's/\(abc\)/\U\1/'这在Ruby中可行吗? 最佳答案 查看gsub文档:str.gsub(模式){|匹配|block}→new_str在block形式中,当前匹配字符串作为参数传入,$1、$2、$`、$&、$'等变量将被适当设置。block返回的值将替换为每次调用的匹配项。"alowerupperb".gsub(/(lower)(upper)/){|s|$1+""+$2.upcase}

  9. 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上

  10. ruby - sinatra 框架的 MVC 模式 - 2

    我想开始使用“Sinatra”框架进行编码,但我找不到该框架的“MVC”模式。是“MVC-Sinatra”模式或框架吗? 最佳答案 您可能想查看Padrino这是一个围绕Sinatra构建的框架,可为您的项目提供更“类似Rails”的感觉,但没有那么多隐藏的魔法。这是使用Sinatra可以做什么的一个很好的例子。虽然如果您需要开始使用这很好,但我个人建议您将它用作学习工具,以对您来说最有意义的方式使用Sinatra构建您自己的应用程序。写一些测试/期望,写一些代码,通过测试-重复:)至于ORM,你还应该结帐Sequel其中(imho

随机推荐