更新 imageView swift 4 的高度约束时无法同时满足约束

2023-12-07

我有一个stack view如下图所示:

enter image description here

所以我改变了高度image以编程方式使其适合从我的服务器下载的图像,如果没有图像,则高度限制image将设置为零。

这是我这样做的代码:

    let imageUrl = URL(string :imageString)

    if let data = try? Data(contentsOf: imageUrl!)
    {

       guard let actualImage: UIImage = UIImage(data: data) else{
        print("No image!")
        ImageView.image = nil
       defaultImageHeightContrainst = ImageHeightContrainst.constant
       ImageHeightContrainst.constant = 0

        layoutIfNeeded()
        return
      }

     let imageHeight = actualImage.size.height * actualImage.scale
     print("imageHeight = \(imageHeight)")
     defaultImageHeightContrainst = ImageHeightContrainst.constant
     ImageHeightContrainst.constant = imageHeight

     layoutIfNeeded()

     //here display the image to the imageview
      ImageView.kf.setImage(with: imageUrl)

   }

上面的代码中,图像高度是根据从网上下载的实际图像高度进行缩放的。如果没有图像,“图像”部分也已设置为0。

这是我所期望的,但现在每当“图像”高度变高以适应实际图像高度时,我都会遇到以下错误

 Probably at least one of the constraints in the following list is one you don't want. 
    Try this: 
        (1) look at each constraint and try to figure out which you don't expect; 
        (2) find the code that added the unwanted constraint or constraints and fix it. 
(
    "<NSLayoutConstraint:0x6080002868b0 UIImageView:0x7f9cbae59240.height == 50   (active)>",
    "<NSLayoutConstraint:0x608000286bd0 UIView:0x7f9cbae5ad80.height == 1   (active)>",
    "<NSLayoutConstraint:0x608000286d10 UIImageView:0x7f9cbae5b440.height == 458   (active)>",
    "<NSLayoutConstraint:0x608000286f90 UIView:0x7f9cbae5bb50.height == 1   (active)>",
    "<NSLayoutConstraint:0x6080002871c0 V:|-(0)-[UILabel:0x7f9cbae5b160]   (active, names: '|':UIStackView:0x7f9cbae5af60 )>",
    "<NSLayoutConstraint:0x608000287350 V:[UILabel:0x7f9cbae5b160]-(10)-[UIImageView:0x7f9cbae5b440]   (active)>",
    "<NSLayoutConstraint:0x6080002873a0 V:[UIImageView:0x7f9cbae5b440]-(10)-[UIStackView:0x7f9cbae5b670]   (active)>",
    "<NSLayoutConstraint:0x608000287580 V:[UIStackView:0x7f9cbae5b670]-(10)-[UIView:0x7f9cbae5bb50]   (active)>",
    "<NSLayoutConstraint:0x6080002875d0 V:[UIStackView:0x7f9cbae5c0f0]-(0)-|   (active, names: '|':UIStackView:0x7f9cbae5af60 )>",
    "<NSLayoutConstraint:0x608000287670 V:[UIView:0x7f9cbae5bb50]-(10)-[UIStackView:0x7f9cbae5c0f0]   (active)>",
    "<NSLayoutConstraint:0x6080002877b0 V:|-(10)-[UIImageView:0x7f9cbae59240]   (active, names: '|':UITableViewCellContentView:0x7f9cbae5a0c0 )>",
    "<NSLayoutConstraint:0x6080002878f0 V:[UIImageView:0x7f9cbae59240]-(8)-[UIView:0x7f9cbae5ad80]   (active)>",
    "<NSLayoutConstraint:0x6080002879e0 V:[UIStackView:0x7f9cbae5af60]-(10)-|   (active, names: '|':UITableViewCellContentView:0x7f9cbae5a0c0 )>",
    "<NSLayoutConstraint:0x608000287a80 V:[UIView:0x7f9cbae5ad80]-(8)-[UIStackView:0x7f9cbae5af60]   (active)>",
    "<NSLayoutConstraint:0x608000288c00 'UISV-canvas-connection' UIStackView:0x7f9cbae5c0f0.top == _UILayoutSpacer:0x6080001cd5c0'UISV-alignment-spanner'.top   (active)>",
    "<NSLayoutConstraint:0x608000288ca0 'UISV-canvas-connection' V:[_UILayoutSpacer:0x6080001cd5c0'UISV-alignment-spanner']-(0)-|   (active, names: '|':UIStackView:0x7f9cbae5c0f0 )>",
    "<NSLayoutConstraint:0x608000289970 'UIView-Encapsulated-Layout-Height' UITableViewCellContentView:0x7f9cbae5a0c0.height == 476.5   (active)>"
)

在询问之前,我已经检查了所有其他约束,这些约束都设置正确。我什至禁用了所有可以更改“图像”高度的代码,一旦禁用,就没有问题了。只有当我打算更改时才会出现错误高度。

我什至尝试添加ImageView.translatesAutoresizingMaskIntoConstraints = false before layoutIfNeeded(),但错误仍然存​​在。

那么改变图像高度以适应从服务器下载的实际图像的正确方法是什么?


考虑到最后一个约束说

"<NSLayoutConstraint:0x608000289970 'UIView-Encapsulated-Layout-Height' UITableViewCellContentView:0x7f9cbae5a0c0.height == 476.5   (active)>"

我假设你正在使用stackView里面的一个UITableViewCell在a中实现自动高度单元tableView。如果我的假设是正确的,那么问题不在于stackView,也不与imageView,但随着方式UITableViewUITableViewAutomaticDimension和自动布局。如果布局按您的预期工作,并且警告是唯一让您烦恼的事情,那么请阅读以下内容。

因此,在我看来,这是一个已知“错误”的结果 - 由tableView以及自动布局计算的高度。渲染单元格时,tableView首先应用默认高度,计算自动布局高度,然后使用后者 - 至少看起来是这样。看我的question。上面提到的约束('UIView-Encapsulated-Layout-Height') 是由UITableView后来就消失了。

这意味着您使用的约束可能没问题。只需将定义高度的约束之一设置为priority = 999(这样在禁用默认高度约束之前,它不会引起任何冲突)。最终,无论如何它都会导致使用您的约束,因此不会造成任何布局问题。

例如,如果您限制stackView以适应细胞的contentView,设置stackView.bottomAnchor to contentView.bottomAnchor只需将优先级设置为 999。如果您以编程方式进行布局,这可能是您的解决方案:

let bottomConstraint = tableView.bottomAnchor.constraint(equalTo: view.bottomAnchor)
bottomConstraint.priority = UILayoutPriority(rawValue: 999)
NSLayoutConstraint.activate([
    // rest of the constraints
    stackView.topAnchor.constraint(equalTo: contentView.topAnchor),
    stackView.leftAnchor.constraint(equalTo: contentView.leftAnchor),
    stackView.rightAnchor.constraint(equalTo: contentView.rightAnchor),
    bottomConstraint,
])

如果您在故事板中进行布局,只需在故事板中选择适当的约束,然后在属性检查器中将其优先级设置为 999(例如):

Settings constraint's priority to 999

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

更新 imageView swift 4 的高度约束时无法同时满足约束 的相关文章

  • IOS 上图像的加密/解密

    我们正在使用加密 解密和 UIIMAGE 如果我们加密和解密 UIIMAge 而不保存到 iphone 画廊中 它工作正常 但如果我们加密 保存到画廊中 将 加密的图像 加载到应用程序中 然后解密它效果不好 我们使用这个函数来加密 解密 保
  • iOS:我如何知道某个属性是否符合 KVO 标准?

    In the 键值观察编程指南 https developer apple com library archive documentation Cocoa Conceptual KeyValueObserving KeyValueObser
  • CIAdditionCompositing 给出不正确的效果

    我正在尝试通过平均其他几个图像来创建图像 为了实现这一点 我首先将每个图像变暗 其系数等于我平均的图像数量 func darkenImage by multiplier CGFloat gt CIImage let divImage CII
  • iOS 键盘显示后分屏宽度

    我刚刚开始研究 Cordova 应用程序对分屏多任务处理的支持 到目前为止 该应用程序在模拟器中的 iPad 上显示和调整大小都很好 但是当我单击编辑字段并显示软件键盘时 100 宽度的值开始返回整个屏幕 而不是给出的窗口 初始显示 到目前
  • 如何在运行仅 iPhone 应用程序(非通用)的 iPad 上的 UIPickerView 中支持 VoiceOver?

    一般来说 我会查看 Apple 的 UICatalog 示例代码以获取基本的 VoiceOver 支持 但示例代码中似乎有对 UIPickerViews 的 VoiceOver 支持 我是否需要在某处提供accessibilityLabel
  • 我如何用 javascript/jquery 进行两指拖动?

    我正在尝试创建当有两个手指放在 div 上时拖动 div 的功能 我已将 div 绑定到 touchstart 和 touchmove 事件 我只是不确定如何编写这些函数 就像是if event originalEvent targetTo
  • 如何在 NSDate 变量中仅设置时间?

    我有 NSDate 变量 只想更改时间 不应更改日期 是否可以 例如 用户在 DatePicker 日期中选择日期间隔 如果是开始日期 我想将时间设置为 00 00 00 如果是结束日期 我将时间设置为 23 59 59 感谢你的帮助 问候
  • 如何从 iOS 应用程序检测不安全的 wifi 网络

    我想检测我的应用程序中是否存在不安全的 wifi 网络 是否有任何公共 iOS API 可以实现相同的目的 没有记录的 API 可以获取该信息 如果您的应用程序需要通过网络发送和接收敏感数据 您通常应该假设没有安全连接
  • 如何从日期中获取小时、分钟和上午/下午? [复制]

    这个问题在这里已经有答案了 我尝试从日期中提取小时 分钟和上午 下午 但我得到 NULL 输出 我在下面显示了我的代码 请查看 NSString dateStr 29 07 2013 02 00am NSDateFormatter form
  • iOS 解析如何通过 URL 下载文件

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

    我看过一些例子 但我认为我的问题可能出在 PHP 中 我正在尝试使用 AFNetworking 将图像从 iPhone 上传到服务器 这是我的 obj c 代码 IBAction uploadButtonClicked id sender
  • 核心数据:为什么必须调用重新加载数据才能使我的应用程序运行?

    我花了整个晚上调试一个简单的应用程序 该应用程序从网络检索一张图像 是的 是的 旨在让我的生活更轻松 并将其显示在表格视图中 我这样做是为了练习学习核心数据 在我修复它之前 错误消息显示如下 2012 09 30 06 16 12 854
  • 无需 iPhone 6 Plus 即可预览 iOS 应用程序

    我已经在 Yosemite 中使用 iPhone 6 和 Quicktime 完成了 iOS 应用程序预览 视频 但我无法在 iTunes Connect 中为 iPhone 6 上传它 而且我没有 iPhone 6 设备 有没有办法在没有
  • ios 11 - UIBarButtonItem 内的 UIButton 导致自动布局错误

    我在将 UIButton 添加到 UIBarButtonItem 时遇到了一个已知问题 我尝试按照建议添加自动布局约束堆栈溢出 https stackoverflow com a 46336639 505603但我收到如下所述的错误 UIB
  • 将捕获的图像精确裁剪为 AVCaptureVideoPreviewLayer 中的外观

    我有一个使用 AV Foundation 的照片应用程序 我使用 AVCaptureVideoPreviewLayer 设置了一个预览层 它占据了屏幕的上半部分 因此 当用户尝试拍照时 他们只能看到屏幕上半部分看到的内容 这很好用 但是当用
  • 断点条件错误

    我已经根据条件设置了断点 event name isEqualToString Some Name 这很好用 但是 当我尝试添加另一个带有条件的断点时 part name isEqualToString Some Value With A
  • Xcode 在代码签名身份中看不到我的开发人员证书

    我续订了 IOS 开发人员证书 从钥匙串中删除了旧证书 然后单击了我的证书 钥匙串中的一切看起来都很正常 我有分发 开发人员 WWDC 证书 每个配置文件看起来都有效 并带有绿色标记 在组织器中的团队和配置文件部分下 但在代码签名身份下的
  • 使用 nib 作为带有 nib 类的表节标题

    我想创建一个加载 nib 文件并将其设置为标题 UIView 的节标题 这个 nib 文件还将有一个关联的类 其中插座和操作连接到 因此我想像平常一样使用 nib 加载该类 我在网上搜索并找到了几个类似的答案 但我找不到任何适合我的答案 经
  • 进入后台时 Alamofire 请求卡住?

    我正在使用 Alamofire 调用 Web 服务 该服务需要相当长的时间才能加载 如果应用程序进入后台 当我返回应用程序时 我会被加载程序卡住 我想这是因为调用永远不会向我的完成处理程序返回任何内容 我该如何解决这个问题 您可以使用后台抓
  • iOS 13 检查 CLLocationManager 的临时授权状态

    根据 WWDC 视频 https developer apple com videos play wwdc2019 705 https developer apple com videos play wwdc2019 705 当你要求 Al

随机推荐

  • .Net 中的图形错误图像插值

    我有一个简单的测试 当它解决时 我的问题也解决了 当处理小图像时 图形插值的效果很差 请检查您是否知道如何解决以下代码中的结果图像忽略要绘制的图像的后半部分的问题 使用 JPG 中的 loadimage 或任何你想要的东西在图像上绘制一些东
  • 如何从html页面中提取文本?

    例如网页是链接 https www architecture com FindAnArchitect FAAPractices aspx display 50 我必须知道公司名称及其地址和网站 我尝试了以下方法将 html 转换为文本 im
  • 无法在模块的类中声明具有公共访问权限的变量

    我正在制作一个基于 GUI 的应用程序 表单 并遇到以下错误 首先 我在模块中声明以下内容 Module test mod Public Structure sub struct Public test int As Integer Pub
  • 从远程读取h5文件

    我有一个问题 我无法从我的服务器读取 h5 文件 我的服务器上有 ssh 服务器也是本地的 所以我有两种类型的代码 store1 pd HDFStore os system scp newrow data copy h5 email pro
  • 如何使用量角器或硒测试@media print?

    我已经在我的网站上实现和打印功能 我想通过量角器 硒来测试它 有任何方法可以 应用 下面的样式 media print测试期间 我只看到一个相关的question 但没有任何好的答案 例如在那个样本中我想要 hiddendiv 将在测试过程
  • Javascript Date.ToLocaleTimeString() 与计算机的时间格式不匹配

    我的电脑定义为使用 24 小时格式 但是 当我使用var date new Date 10 25 2020 19 32 进而date toLocaleTimeString I get a 12h format 当没有提供选项时 输出到区域设
  • RuntimeError:当我附加 hdf5 文件时无法创建链接(名称已存在)?

    我正在尝试将 hdf5 数据集附加到之前的 hdf5 数据集发生以下错误 h5o link obj id self id 名称 lcpl lcpl lapl self lapl 文件 h5py objects pyx 第 54 行 在 h5
  • Angular4异常:无法绑定到“ngClass”,因为它不是“input”的已知属性

    在我的项目中我使用延迟加载所以 在我的注册模块中我使用 ngClass 指令添加无效类时formGroup我的注册表上有一些验证错误 但我的代码在尝试添加时抛出异常 ngClass 我的表格上的指令 无法绑定到 ngClass 因为它不是
  • 添加一列,该列是 pandas 中连续行的差异结果

    假设我有一个像这样的数据框 A B 0 a b 1 c d 2 e f 3 g h 0 1 2 3是时间 a c e g是一个时间序列 b d f h是另一个时间序列 我需要能够向原始数据帧添加两列 这是通过计算某些列的连续行的差异而获得的
  • Facebook 群组文档 API

    我是否可以使用 facebook group api 发布和检索群组文档 我已经浏览了文档 但找不到任何解释如何实现这一点的内容 如果有人知道我可以在哪里获得此内容 请提供链接网址 以便我可以自己阅读 简而言之 我想检索文档并能够通过 fa
  • 是否可以从 Spring 应用程序属性中获取自定义对象?

    是否可以从 application yaml 获取自己的对象并将其与 Value 绑定到我的组件 Model Data public class CurrencyPlan private String id private String b
  • PHP 提交后保留选择选项

    我有一个 html 选择框 其中包含国家 地区列表 当我选择一个时 它会毫无问题地发送到 PHP 方法 但选择框会重置到顶部 如何保留用户在此处选择的值 我的代码在这里 为了简洁起见 我已经删除了大多数其他国家 地区
  • 在arm-linux中打印堆栈跟踪

    我按照这篇文章打印堆栈跟踪当我的 gcc C 应用程序崩溃时如何生成堆栈跟踪 它在 x86 linux 上运行良好 谁能教我如何让它在arm linux上运行 我使用的是arm linux gcc 4 4 3 root FriendlyAR
  • 使用 Sinatra 更改 HTTP 状态消息

    我正在编写一个简单的 Sinatra 应用程序 并且给定用户发布包含特定数据的请求 我想返回错误 453 自定义错误代码 以及消息 CLIENT ERROR 或类似的内容 问题是 查看 Sinatra 文档并进行一些测试 我找不到设置响应错
  • 如何检测鼠标指针是否击中 HTML 5 画布上已绘制的线条

    我试图弄清楚如何使用 jQuery 检测用户的鼠标是否点击了 HTML 5 画布上的一行 这是生成画布线的代码
  • R 中的空间自相关分析 (Global Moran's I)

    我有一个点列表 我想使用 Moran s I 并通过将感兴趣的区域除以 4 x 4 样方来检查自相关性 现在我在谷歌上找到的每个例子 例如http www ats ucla edu stat r faq morans i htm 使用某种测
  • 噩梦 JS 不工作

    我知道问题的标题看起来很模糊 但仅此而已 我在我的生产服务器上安装了nodejs 其中phantomjs工作正常 然后我通过安装了噩梦npm install nightmare 我可以在node modules中看到它 我尝试了开发人员在g
  • 如何在选择时突出显示菜单项? [复制]

    这个问题在这里已经有答案了 如何在选择时突出显示菜单项 我尝试使用各种属性修改 styles xml 例如colorPressedHighlight colorActivatedHighlight等 有没有办法让菜单项保持焦点 直到选择其他
  • 在脚本仍在执行时显示结果

    现在为了看到结果 我必须等到整个代码执行完毕 它会挂起直到完成并保持加载状态 一旦完成 它就会显示我正在寻找的所有信息 在脚本仍在运行时是否有办法显示此信息 所以说 如果我在代码顶部的某个地方有一个打印 我希望它在调用时显示 而不是在脚本执
  • 更新 imageView swift 4 的高度约束时无法同时满足约束

    我有一个stack view如下图所示 所以我改变了高度image以编程方式使其适合从我的服务器下载的图像 如果没有图像 则高度限制image将设置为零 这是我这样做的代码 let imageUrl URL string imageStri