NSView 的自动调整大小行为

2023-11-26

我需要了解 NSView 如何自动调整其视图的大小。我已经在 IB 中设置了所有内容,并且我的子视图可以很好地调整大小(当我用鼠标调整窗口大小时)。但是,如果我这样做[myMainView setFrame:]使用我的新框架矩形,什么也没有发生。我的所有子视图仍然是原始大小(即使主视图具有正确的尺寸)。儿童的resizeWithOldSuperviewSize:被调用,但它的大小仍然不合适。

我的屏幕上有一个充满可可元素的屏幕(屏幕#1)、标签、图像、视频。这些元素有一个明确定义的布局。我已经通过 Interface Builder 设置了自动调整大小行为,效果非常好。调整主窗口的大小以令人满意的方式调整元素的大小。

现在,用户单击“下一步”按钮,将绘制第二个充满元素的屏幕(屏幕#2)。我的布局是基于规范的屏幕尺寸(例如 800x600)构建的。但现在窗口更大(或更小),因为它在屏幕 #1 中调整了大小。因此,元素现在仅占据窗口中的一小部分区域,而不是适当调整大小以填充可用空间。我想扩展这些元素。

我是否误解了自动调整大小的工作原理?如何手动触发 NSView 下的自动调整大小机制?

我可以做两件事:

  1. 根据当前屏幕尺寸相对于原始尺寸手动调整元素的大小。这个选项不是我最喜欢的,因为看起来,我被迫重写已经在 NSView 中工作的代码(自动调整大小行为)
  2. 我的第二个选择是调用前面提到的 NSView 的自动调整大小魔法。文档暗示 [NSView setFrame:] 将为我做到这一点。我尝试过的是将内容视图的大小调整为原始屏幕大小(800x600),渲染我的元素,然后将其调整为当前窗口大小。从概念上讲,这与手动调整窗口大小不一样吗?看来并非如此。同样,此选项更可取,因为它最大限度地减少了编写和维护的代码量。

这段代码

NSView* superView = [[NSView alloc] initWithFrame:NSMakeRect(0, 0, 100, 100)];
NSView* subView   = [[NSView alloc] initWithFrame:NSMakeRect(0, 0, 100, 100)];
[superView addSubview:subView];

[superView setAutoresizesSubviews:YES];
[subView setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable];

NSLog(@"subview's frame before resizing: %@", NSStringFromRect([subView frame]));
[superView setFrame:NSMakeRect(0, 0, 200, 100)];
NSLog(@"subview's frame after  resizing: %@", NSStringFromRect([subView frame]));

确实给出了预期的结果:


[...] subview's frame before resizing: {{0, 0}, {100, 100}}
[...] subview's frame after  resizing: {{0, 0}, {200, 100}}  

你的问题在别处。我希望在调整大小时,您的容器视图之一不是窗口视图层次结构的一部分。

解决您的问题的一个好的解决方案可能是使用不带选项卡的 NSTabView,因为这样您的所有视图始终都在窗口中(可能隐藏),并且选项卡视图负责调整大小。

另一种解决方案是将多个视图放在彼此之上并使用setHidden:仅显示一个。

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

NSView 的自动调整大小行为 的相关文章

  • vscode通过SSH连接gitlab的问题

    我在尝试通过 SSH 连接到 GitLab 远程存储库时遇到问题 这里是迄今为止完成的步骤 成功生成 SSH 密钥 管理人员将密钥添加到存储库中 因此当我访问 GitLab 网站时 我可以提交和发布分支 我无法从 VSCODE 发布分支并收
  • SwiftUI 更新主菜单 [已解决] kludgey

    真正的问题 你如何更新mainMenu在 SwiftUI 中 它真的可以工作吗 我在 SwiftUI 中构建了一个基于 MacOS 文档的应用程序 其中包括所有内置的文件菜单命令 即关闭 保存 复制 重命名 等 在保存文档之前 我会验证结构
  • 获取本周的第一天和最后一天

    如何获取本周的第一天和最后一天 我需要的是某种方法来过滤一组具有 NSDate 属性的对象 只留下本周出现的对象 然后按天过滤它们 我还需要一些方法来获取本地化的日期名称 我尝试使用 NSCalendar NSDate 和 NSDateCo
  • CIAdditionCompositing 给出不正确的效果

    我正在尝试通过平均其他几个图像来创建图像 为了实现这一点 我首先将每个图像变暗 其系数等于我平均的图像数量 func darkenImage by multiplier CGFloat gt CIImage let divImage CII
  • 对 boost 库的依赖项没有完整路径

    我已经成功构建了动态库 依赖于使用自定义前缀构建和安装的 boost 库 b2 install prefix PREFIX 然而 当我跑步时otool L在我的库中 我得到如下输出 libboost regex dylib compatib
  • Cocoa 基于文档的应用程序中的 MVC

    我目前正在对我的应用程序进行重构和重组 我意识到模型和视图及其控制器之间的一些分离已经减少 我希望进行一些清理 我的应用程序中使用了几个关键类 NSPersistentDocument NSWindowController 和模型类 NSP
  • 如何从 DTrace 脚本打印 NSString

    This question https stackoverflow com questions 1413623 how do i print a cfstringref in a dtrace action正在问同样的事情 但是当我尝试时
  • 在 OSX 和 GNU 中使用“find”删除带有数字的文件名

    我正在尝试搜索一个文件并删除名称中包含数字的类似文件 我的文件 txt from myfile 00 04 version txt myfile 00 txt find E iregex myfile 0 9 1 txt 删除 myfile
  • 分段错误:当我运行 Pygame 时为 11

    有人问过类似的问题here https stackoverflow com questions 34278488 pygame display causing segmentation fault 11 但没有得到答复 我有 Python
  • 为什么 struct tm 中的 tm_year 成员相对于 1900 而不是 macOS 上 C 中的 1970?

    当我遇到这个问题时 我正在尝试专家 C 编程中的示例 我的程序基本上做一件事 使用标准gmtime运行一下 看看自 1970 年以来已经过去了多少年 这是我的程序 include
  • VS Code 即使关闭也使用 100% CPU

    即使未打开 VS Code 也会占用 100 的 CPU 使用率 我跑了ps aux grep PID命令查看详细信息但什么也看不懂 这是输出 tawhid 27099 100 0 0 1 447352160 11856 R 7 18PM
  • java setFullScreenWindow 在 Mac 中隐藏登录对话框

    我使用的是全屏窗口 类似于屏幕保护程序 使用这里的方法 GraphicsEnvironment getLocalGraphicsEnvironment getDefaultScreenDevice setFullScreenWindow t
  • viewController 中的 Sprite 粒子系统动画

    I create a macOS single window application and add a Sprite Particle System file with template Stars and the visual effe
  • 在 XCode 7.0.1 中设置 VTK 6.1

    所以 我遇到了问题VTK 可视化工具包 http www vtk org在 Mac OSX 上工作 特别是让它在XCode https developer apple com xcode 我让它工作并将在下面发布这个问题的答案 截至 201
  • `pyqt5'错误`元数据生成失败`

    我正在尝试安装pyqt5使用带有 M1 芯片和 Python 3 9 12 的 mac 操作系统 我怀疑M1芯片可能是原因 我收到一个错误metadata generation failed 最小工作示例 directly in the t
  • 在 macOS 上为 MoviePy 安装 ffmpeg 失败并出现 SSL 错误

    我正在尝试编写一个 Python 程序 在 Mac OS 10 11 16 上使用 MoviePy 将 MP4 文件转换为 GIF 我用 import moviepy editor as mp 我收到一条错误消息 说我需要打电话imagei
  • 无法连接到 macOS 上的 Docker 守护进程

    我通常更喜欢使用brew 来管理我的OSX 上的应用程序 我能够安装 docker docker compose 和 docker machine docker version Docker version 17 05 0 ce build
  • MySQL 数据库无法在 XAMPP for Mac 上启动

    突然我在 mac 上遇到了这个问题 我无法启动我的 MySQL 数据库 我只能启动 ProFTPD 和 Apache Web Server 这是应用程序日志 Starting all servers Starting MySQL Datab
  • 超类与类SpecificationPolicy不匹配

    我得到了一个superclass mismatch for class SpecificationPolicy尝试安装或升级某些brew 软件包时出错 例如 更新安装 supabase CLI 时 brew install supabase
  • 使用基于约束的布局自动调整 NSTokenField 的大小

    有没有办法自动调整大小height使用约束的 NSTokenField 保持宽度恒定 sizeToFit应该有效 但事实并非如此 如果我设置一个约束来保持宽度不变并调用此方法 它将忽略约束并仅调整宽度大小 当我想要的是仅调整高度大小时 基于

随机推荐

  • 为什么在接收更改事件时不更改通知程序

    我发布了一个答案Java TableModelListener 和 Live Feed Listener 但我收到了一条评论 kleopatra nonono you never change the notifier in receivi
  • 杀死另一个应用程序并清除其数据

    我正在开发一种工具 可以杀死选定的应用程序并清除其所有数据 有点模拟this我只有可用的包名称 我不确定它是否有效 但你可以做的是获取应用程序的进程 ID 和你拥有的包名称 然后调用killProcess 以进程ID为参数的方法 EDIT1
  • 如何在 AlternateView 上设置编码

    我正在通过以下方式创建邮件正文 using var streamWriter new StreamWriter fooFileName false Encoding UTF8 streamWriter Write fooMessage 现在
  • Android 的 overridePendingTransition 和 singleInstance

    将活动的 launchMode 更改为 singleInstance 后 我遇到了 overridePendingTransition 不起作用的问题 我很想听听您的意见 我正在开发一个应用程序来浏览一副纸牌 为了简单起见 我们假设应用程序
  • 是否有一个函数或包可以模拟从 lm() 返回的对象的预测?

    是否有一个类似于 runif rnorm 等的单一函数可以为线性模型生成模拟预测 我可以自己编写代码 但是代码很丑陋 我认为这是以前有人做过的事情 slope 1 5 intercept 0 x as numeric 1 10 e rnor
  • C 预处理器和操作顺序

    我正在学习C 但我不明白这一点 define square x x x a square 2 3 a 11 当这个运行时 为什么a最终成为11 它扩展到2 3 2 3 这相当于2 3 2 3 使用括号来修复它 define square x
  • 我是否总是需要转义非“文字”字符串中的元字符?

    似乎有一个包含字符的字符串 or 在正则表达式处理期间被拒绝 我可以理解这些是保留字符 我需要转义它们 所以如果我这样做 string replaceAll pattern 这有效 在哪里pattern是任何以以下开头的字符串 问题 有没有
  • React-native:“无法连接到开发服务器”- Android 应用程序

    我正在遵循启动react js 的指南 http code tutsplus com tutorials creating a dictionary app using react native for android cms 24969我
  • 当某些条件成立时 Scala FoldLeft

    如何在 Scala 中模拟以下行为 即在满足累加器上的某些特定条件时继续折叠 def foldLeftWhile B z B p B gt Boolean op B A gt B B 例如 scala gt val seq Seq 1 2
  • 如何使用 Cucumber 测试确认对话框?

    我正在将 Ruby on Rails 与 Cucumber 和 Capybara 一起使用 我将如何测试一个简单的确认命令 你确定吗 另外 我在哪里可以找到有关此问题的更多文档 硒驱动程序现在支持这个 从 Capybara 中 您可以像这样
  • 为什么 std::array::size constexpr 具有简单类型(int、double、...)而不是 std::vector (GCC)?

    以下代码 std array
  • js while(true){} 阻止事件循环

    setInterval function console log hello 2000 while true hello 永远不会被打印 我认为事件循环在不同的线程中运行 但这里似乎 while 循环 阻止了 事件循环 的执行 有人可以解释
  • 从 FF 中的选择框中删除轮廓

    是否可以删除选择元素中所选项目周围的虚线 我尝试添加outlineCSS 中的属性但它不起作用 至少在 FF 中不起作用 Update在继续删除大纲之前 请阅读本文 http www outlinenone com Well 双像素的答案简
  • 将模板传递给“rails new”

    当调用 rails new 时 显然可以通过 m 命令行参数传递某种模板或设置脚本 我发现这个通过https github com fortuity rails3 mongoid devise wiki Tutorial 演练 And ht
  • 由空格分隔的两个字符串自动连接

    我刚刚发现了一些非常有趣的东西 这是由我的打字错误引入的 这是一个非常简单的代码脚本示例 printf A B 结果将是 gt AB 有人可以解释这是如何发生的吗 作为 C 标准的一部分 相邻的字符串文字被连接起来 对于C 引用C99 但C
  • 谷歌分析 API V3 / OAuth 2

    我拼命地试图自己解决这个问题 并且不想带着这个问题来解决这个问题 但我已经束手无策了 不感谢 api oauth 文档 我正在 PHP 中工作 我试图避免使用Google Client and AnalyticsService类 通过使用
  • Android 中的并发文件访问

    我知道许多操作系统对文件系统执行某种锁定以防止视图不一致 Java 和 或 Android 对文件访问的线程安全性有任何保证吗 在我自己编写并发代码之前 我想尽可能多地了解这一点 如果我错过了已回答的类似问题 请随时关闭此线程 谢谢 And
  • 服务发现如何与现代 docker/docker-compose 一起工作?

    我正在使用 Docker 1 11 1 和 docker compose 1 8 0 rc2 在过去的美好时光 所以 去年 你可以建立一个docker compose yml像这样的文件 app image myapp frontend i
  • 使用 pika 发布消息时如何添加标头键:值对

    我正在编写一个自动化测试来测试消费者 到目前为止 我在发布消息时不需要包含标头 但现在我需要了 而且似乎缺乏文档 这是我的出版商 class RMQProducer object def init self host exchange ro
  • NSView 的自动调整大小行为

    我需要了解 NSView 如何自动调整其视图的大小 我已经在 IB 中设置了所有内容 并且我的子视图可以很好地调整大小 当我用鼠标调整窗口大小时 但是 如果我这样做 myMainView setFrame 使用我的新框架矩形 什么也没有发生