获取现有的 NSLayoutConstraint 宽度?

2023-12-25

我正在尝试使用自动布局为 Cocoa 中的控件设置动画。

现在,我可以设置[[constraint animator] setConstant:newWidth];,有效。 但我怎样才能得到正确的约束呢?

With [self constraints]你可以获得所有的约束,在这种情况下我可以选择constraints[0],但约束的顺序可能会有所不同。

我如何确定我始终具有正确的约束? 约束在 Interface Builder 中设置。我看到您可以向其中添加 IBOutlet,但这似乎没有必要。


我的解决方案

谢谢,效果很好。我写了一个小类别。


NSView+NSLayoutConstraintFilter.h

#import <Cocoa/Cocoa.h>

@interface NSView (NSLayoutConstraintFilter)
- (NSLayoutConstraint *)constraintForAttribute:(NSLayoutAttribute)attribute;
- (NSArray *)constaintsForAttribute:(NSLayoutAttribute)attribute;
@end

NSView+NSLayoutConstraintFilter.m

#import "NSView+NSLayoutConstraintFilter.h"

@implementation NSView (NSLayoutConstraintFilter)

- (NSArray *)constaintsForAttribute:(NSLayoutAttribute)attribute {
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"firstAttribute = %d", attribute];
    NSArray *filteredArray = [[self constraints] filteredArrayUsingPredicate:predicate];

    return filteredArray;
}

- (NSLayoutConstraint *)constraintForAttribute:(NSLayoutAttribute)attribute {
    NSArray *constraints = [self constaintsForAttribute:attribute];

    if (constraints.count) {
        return constraints[0];
    }

    return nil;
}

@end

每个约束都有一个属性[constraint firstAttribute]它返回一个枚举 NSLayoutAttribute

typedef NS_ENUM(NSInteger, NSLayoutAttribute) {
    NSLayoutAttributeLeft = 1,
    NSLayoutAttributeRight,
    NSLayoutAttributeTop,
    NSLayoutAttributeBottom,
    NSLayoutAttributeLeading,
    NSLayoutAttributeTrailing,
    NSLayoutAttributeWidth,
    NSLayoutAttributeHeight,
    NSLayoutAttributeCenterX,
    NSLayoutAttributeCenterY,
    NSLayoutAttributeBaseline,

    NSLayoutAttributeNotAnAttribute = 0
};

所以你可以检查 NSLayoutAttributeWidth 的宽度。

示例代码:

NSArray constraints = [self constraints];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"firstAttribute = %d", NSLayoutAttributeWidth];
NSArray *filteredArray = [constraints filteredArrayUsingPredicate:predicate];
if(filteredArray.count == 0){
      return nil;
}
NSLayoutConstraint *constraint =  [constraints objectAtIndex:0];
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

获取现有的 NSLayoutConstraint 宽度? 的相关文章

  • 在 iOS 上将 NSString 转换为 NSDate 的正确方法?

    我一直在使用此方法将常规 NSString 对象转换为 NSDate 但尝试向 Apple 提交更新 但遭到拒绝 在 iOS 中还有什么其他方法可以做到这一点 NSString date str 2011 08 12T12 20 00Z N
  • 如何在 OS X 上使用 OpenSSL 1.0.1 编译 PHP 5.5.19

    我已经安装了 OpenSSL 1 0 1j usr local ssl现在我尝试使用此版本的 OpenSSL 编译 PHP 5 5 19 这是我的配置过程 export CFLAGS arch x86 64 export CXXFLAGS
  • 覆盖层不与 UITableView 一起滚动 - iOS

    我有一个 UITableView 类 它使用以下方法在转到下一个屏幕时调用加载覆盖 问题是这个加载屏幕不随列表滚动 所以如果你滚动一点并单击某些东西 加载屏幕不会显示 因为它位于顶部 如何让加载屏幕始终保持在 UITableView 的顶部
  • 在 XCode 中链接静态 ObjC 库的过程

    我正在尝试链接到静态库 但不断收到链接器错误 我发现了一些发布示例的网站 但我无法看到我做错了什么 首先 我创建一个链接到我的库的项目 添加 gt 现有文件找到我的 xcodeproj 文件选择 将项目复制到目标组文件夹 选择我的宿主项目作
  • 减少 CoreData 的调试输出?

    我正在开发一个使用 CoreData 的 iOS macOS 项目 它工作正常 但它会向控制台输出大量调试信息 这使得控制台无法使用 因为我的打印语句隐藏在所有与 CoreData 相关的内容中 我有一个非常简单的 CoreData 设置
  • UIPanGestureRecognizer 对坐标的限制

    我在主 UIView 中添加了一个子视图 称为panel 并且我向其中添加了gestureRecognizer 因为我希望它只能在Y轴上拖动并且只能在某些限制下 即160 300 超过300它不能拖动 我以这种方式实现了手势处理 IBAct
  • insertNewObjectForEntityForName:

    我使用 Xcode xcdatamodel 文件编辑器设置了一个实体 我创建了一个名为 Person 的实体 添加了一些属性 然后生成了一个 m 文件来表示它 一切都很好 现在 当我去编写一行代码时 例如 Person person Per
  • 在 UIScrollview 上显示缩略图的最佳方法是什么(从服务器下载)

    我想在 UIScrollview 如照片应用程序 上显示许多图像 作为缩略图 所有图像将从服务器下载 据我所知 有几种选择 1 通过创建 UIImageviews 然后将它们添加为主滚动视图上的子视图 2 通过子类化一个UIView类 然后
  • Apple Mach-O 链接器错误(静态,不是 ld)

    我最近遇到了 Apple Mach O 链接器错误 大多数指南建议将 构建设置 中的位码更改为 否 但它仅适用于 ld 错误 这与我的不同 我会提供截图 请帮忙修复bug pod HandySwift 导致了错误的出现 这是它的 Githu
  • Mac OS X 上的 .dll 等效项 [重复]

    这个问题在这里已经有答案了 我来自一个Windows背景 我习惯于通过创建 dll 然后分发所有库和文档 因此 如果用户想要使用它 他会添加对库的引用并使用它 但是 在 Mac 中 我正在开发 SDK 并且我想要一种方法creating a
  • Codesign 想要访问您钥匙串中的密钥“访问”,我输入了登录密码,但一直询问我

    我正在尝试学习从 Xcode 在我的 iPhone 上加载应用程序 当我这样做时 我不断收到 Codesign想要访问您钥匙串中的密钥 访问 我输入了我的登录密码 但它不断弹出 我已经尝试了我的计算机登录很多次 苹果帐户密码 并且好多其它的
  • Xamarin - 错误:dsymutil 退出,代码为 72

    最近升级到 VS for Mac 8 10 21 在构建应用程序时 我得到 Xamarin Shared targets 3 3 Error dsymutil exited with code 72 这是 Xcode 13 3 的情况 完整
  • 未知异常和崩溃

    当我尝试快速滚动表格视图或从远程重新加载数据时 我的应用程序崩溃了 当我先进行远程获取然后滚动表格视图时 一切似乎都工作正常 我不知道下面的崩溃日志意味着什么 它只是有时工作正常 有时崩溃 Incident Identifier 710A1
  • 无法以编程方式快速设置 NSLayoutConstraint 乘数...“无法分配给此表达式的结果

    我试图以编程方式快速设置乘法器的约束 当我设置该值时 它只会给我错误 无法分配给该表达式的结果 我用 IBOutlet 声明了 NSLayoutConstraint 然后设置乘数 就像我对另一个常量所做的那样 效果很好 但这个不会接受它 I
  • 在 mac os Sierra 上,卡在“设置 CocoaPods 主存储库”上

    转移到 mac os sierra 后 我完全格式化了我的 mac 现在每次运行时我都面临安装 cocoapods 的问题sudo gem install cocoapods pre一切都安装得很好 当我尝试安装 Pod 时 终端堆栈打开S
  • 无法将项目添加到 NSMutableArray ivar

    我的目标是将字符串添加到数组中 并在我调用的方法中执行此操作 在这个方法中 我在数组中得到一个空值 但不知道为什么 我在课程开始时有这样的内容 NSMutableArray listOfEvents 以及我在每个事件上调用的方法 void
  • 从 NSImage 获取像素和颜色

    我创建了一个 NSImage 对象 理想情况下想确定它包含多少个像素颜色 这可能吗 此代码呈现NSImage into a CGBitmapContext void updateImageData if image return Dimen
  • 在 Mac 上正确运行基于 SWT 的跨平台 jar

    我一直致力于一个基于 SWT 的项目 该项目旨在部署为 Java Web Start 从而可以在多个平台上使用 到目前为止 我已经成功解决了由于 SWT 依赖的系统特定库而出现的导出问题 请参阅相关thread https stackove
  • Mac 上的 Delphi - 可能吗? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我负责一个 Delphi Win32 项目管理应用程序 我刚刚完成了向 Delphi 2009 的迁移
  • Phonegap Build 与 Xcode4 上的 Phonegap 对比?配置.xml?

    有一个使用phonegap构建的应用程序 我已经使用它编译和测试了http build phonegap com http build phonegap com服务 我发现它使用 XCode 的构建方式与在 Phonegap 网站上的构建方

随机推荐

  • 公共存储库中的私有文件夹(子模块)

    我有一个公共存储库 在其中我想使用一个私有的子模块 如果我将此子模块包含到我的公共存储库中 每个人都能够看到该子模块的内容吗 否 在公共存储库中包含子模块意味着将其 URL 记录在公共 gitmodules 文件中 通过存储库的递归克隆访问
  • 搜索引擎是否尊重 HTTP 标头字段“Content-Location”?

    我想知道搜索引擎是否尊重HTTP 标头字段Content Location http www w3 org Protocols rfc2616 rfc2616 sec14 html sec14 14 例如 当您想要从 URL 中删除会话 I
  • 如何为 Haskell 实例赋予具体值?

    我正在尝试学习 Haskell 但我对这个臭名昭著的 刚性类型变量 错误有点困惑 这是我的代码的相关部分 class Ord v gt Vector v where distance v gt v gt Double with Flexib
  • 如何只在 IE 上破解 css 内联样式?

    如何破解仅在 IE 上的 css 内联样式 只在所有版本的 IE 上破解 css 内联样式 我该怎么办 像那样 div style color eee border 1px solid 000 line height 32px div 你需
  • PyQt5:检查鼠标是否在输入事件中按下

    我的实际应用程序比这复杂得多 但下面的示例总结了我的大部分问题 我有多个 QLabel 我对它们进行了子类化以使它们可单击 标签显示 16x16 图像 需要通过 Pillow 加载图像 将其转换为 ImageQt 对象 然后设置标签的像素图
  • 带下划线前缀的受保护属性

    Like public foo null bar 10 protected stuff null moreStuff 5 似乎很多人都这样做 为什么 这不是不一致的命名吗 就像某些 PHP 函数一样 这是 php5 之前的旧约定 Php4
  • Ipython raw_input 可以解决吗?

    我正在运行一个Python程序 它想要接受raw input 而Ipython笔记本不这样做 已知的限制 实现该功能的推荐方法是什么 解决方法 我想做的是能够运行程序 接受输入并响应 将根据检索到的信息确定选择 并提示输入用户 ID 和密码
  • 我应该使用哪种方法来手动引导我的 AngularJS?

    我看到了以下内容 angular bootstrap document TodoApp angular bootstrap angular element body 0 TodoApp AngularJS 文档也提到了这一点 我不太明白 a
  • VS Code 的 EditorConfig 不起作用

    我使用 VS Code 作为编辑器 我们有一个 editorconfig其中包含格式配置的文件 我们都在编辑器中使用扩展 EditorConfig 来格式化 HTML 和 CSS 常规内容 我已经从这里安装了 VS Code 的扩展 Edi
  • 以编程方式设置 java.awt.headless=true

    我正在尝试设置java awt headless true在应用程序启动期间 但似乎我来得太晚了 非无头模式已经开始 static System setProperty java awt headless true java awt Gra
  • 在 FFMPEG 中对数据流和视频进行编码

    我想将一些专有数据 它是每帧的序列化无符号 64 位整数 编码到视频容器 mp4 作为数据流 但我无法找到任何人执行此操作的说明 教程 我唯一能找到的是这个 它描述了如何创建数据流 用户显然没有成功https lists libav org
  • 如何在 HTML 中创建泪滴?

    如何创建这样的形状以显示在网页上 我不想使用images因为它们在缩放时会变得模糊 我尝试过CSS tear display inline block transform rotate 30deg border 5px solid gree
  • Plotly:并排条形图和饼图

    我想使用并排绘制条形图和饼图subplot函数在plotly然而 在图形的中心绘制了一个大饼图 覆盖了条形图 这是示例代码 Animals lt c giraffes orangutans monkeys SF Zoo lt c 20 14
  • Android Native 在 /system/lib/libskia.so 崩溃(位图处理)

    我需要帮助解决影响 Play 商店中应用程序的错误 Play 开发者控制台上的崩溃报告 此崩溃仅限于某些安卓4 4 devices 无法在模拟器上重现崩溃 堆栈跟踪发生在本机代码 而不是 Java 上 因此很难看出此错误是在哪里调用的 研究
  • 使用 jcifs 读取文件的最简单方法

    我正在尝试使用外部从网络共享读取文件jcifs图书馆 https jcifs samba org 我能找到的大多数用于读取文件的示例代码都非常复杂 甚至可能不必要 我找到了一个简单的方法write到如下所示的文件 有没有办法使用类似的语法读
  • 声明框架中结构的简单协议一致性

    是否可以声明 struct 是在框架中定义的结构 它基本上符合在我的应用程序中定义的协议 举例来说 我有一个 API 它为框架中建模的一些小部件声明结构 public struct VagueWidget public let temper
  • 如何比较 Boost 几何形状?

    我有 2 个 升压 几何 模型 环 我试图判断它们是否相同 是否有内置的增强几何比较函数 方法可以为我解决这个问题 boost geometry equals a b 报告两个几何图形在空间上是否相等
  • WSO2 ESB 5 中的动态 json-eval 表达式

    我正在尝试使用动态生成的 json eval 来处理 JSONPayload 以选择特定的酒店对象 下面提到的直接 json eval 工作得很好 直接 json eval 表达式 json eval content hotelcode A
  • 从 HTML5 存储打开 PDF

    我想将 pdf 文件客户端存储在 HTML5 存储之一 indexedDB 或 localstorage 中 然后稍后使用 adobe reader 打开它们 场景如下 用户访问了我的网站并将一堆 pdf 下载到存储中 稍后 用户重新访问该
  • 获取现有的 NSLayoutConstraint 宽度?

    我正在尝试使用自动布局为 Cocoa 中的控件设置动画 现在 我可以设置 constraint animator setConstant newWidth 有效 但我怎样才能得到正确的约束呢 With self constraints 你可