- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在使用 this 中所示的方法Cocoa with Love 文章创建自定义 NSWindow 子类。如示例中所示,我需要在窗口内容周围有大约 10 像素的边距才能绘制箭头(我正在创建一个弹出窗口样式窗口)。我必须在整个窗口周围设置边距,而不仅仅是带有箭头的一侧,因为我希望能够更改箭头位置,而不必重新定位内容。
总而言之,我用来执行此操作的方法是(相关代码位于底部):
contentRectForFrameRect:
和 frameRectForContentRect:styleMask:
方法以在内容周围添加填充:contentView
,然后重写 contentView
的 setter 和 getter,以便将传入的 View 添加为框架 View 的 subview 。 问题在于窗口的实际内容 View 内部的 View 的自动调整大小 mask 完全困惑。以下是我在界面生成器中设置内容的方法:
以下是如何设置 TableView ScrollView 的自动调整大小掩码:
以下是文本标签的自动调整大小蒙版的设置方式:
这是应用内的结果:
相关代码(源自上述文章)
#define CONTENT_MARGIN 10.0
- (NSRect)contentRectForFrameRect:(NSRect)windowFrame
{
windowFrame.origin = NSZeroPoint;
return NSInsetRect(windowFrame, CONTENT_MARGIN, ICONTENT_MARGIN);
}
- (NSRect)frameRectForContentRect:(NSRect)contentRect
{
return NSInsetRect(contentRect, -CONTENT_MARGINT, -CONTENT_MARGIN);
}
+ (NSRect)frameRectForContentRect:(NSRect)contentRect
styleMask:(NSUInteger)windowStyle
{
return NSInsetRect(contentRect, -CONTENT_MARGIN, -CONTENT_MARGIN);
}
- (NSView*)contentView
{
return _popoverContentView;
}
- (void)setContentView:(NSView *)aView
{
if ([_popoverContentView isEqualTo:aView]) { return; }
NSRect bounds = [self frame];
bounds.origin = NSZeroPoint;
SearchPopoverWindowFrame *frameView = [super contentView];
if (!frameView) {
frameView = [[[SearchPopoverWindowFrame alloc] initWithFrame:bounds] autorelease];
[super setContentView:frameView];
}
if (_popoverContentView) {
[_popoverContentView removeFromSuperview];
}
_popoverContentView = aView;
[_popoverContentView setFrame:[self contentRectForFrameRect:bounds]];
[_popoverContentView setAutoresizingMask:(NSViewWidthSizable | NSViewHeightSizable)];
[frameView addSubview:_popoverContentView];
}
我认为弹出窗口内容可能会超出边缘,所以我在内容 View 周围画了一个边框,但不,一切都应该是这样。唯一的问题是内容 View 内标签和 TableView 的自动调整大小蒙版无法正常工作。非常感谢任何建议。
编辑:如果有人感兴趣,我已在 github 上开源了此弹出窗口/ Controller 的完整代码:INPopoverController 。包含一个示例项目,以防您想尝试重现该问题。
最佳答案
-( void )scaleWindowForHeight:( float )height
{
if (height > 22)
{
NSWindow* window = [self window];
NSRect old_window_frame = [window frame];
NSRect old_content_rect = [window contentRectForFrameRect: old_window_frame];
NSSize new_content_size = NSMakeSize( old_window_frame.size.width, height );
// need to move window by Y-axis because NSWindow origin point is at lower side:
NSRect new_content_rect = NSMakeRect( NSMinX( old_content_rect ), NSMaxY( old_content_rect ) - new_content_size.height, new_content_size.width, new_content_size.height );
NSRect new_window_frame = [window frameRectForContentRect: new_content_rect];
[window setFrame: new_window_frame display:YES animate: [window isVisible] ];
}
else
NSLog(@"window size too small");
}
关于objective-c - 自定义 NSWindow 内容边距会导致自动调整大小蒙版困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5215219/
我有一个主窗口,它是我的应用程序的中心。对于不同的功能,我打开一个子窗口来处理某些专门的功能。我希望所有窗口都能独立移动,但现在如果我移动原始的中央窗口,那么所有这些子窗口都会随之移动。如何使子窗口断
当我打开自动释放的 NSWindow 时,一切正常。仅当我单击“确定”按钮后,NSWindow 才会由我的根类释放。 但是,当我打开一个 NSWindow 并从打开的 NSWindow 打开一个新的
这两个委托(delegate)方法在 NSWindow 开始移动之前或 NSWindow 停止移动之后调用。 -(void)windowWillMove:(NSNotification *)notif
我想在 NSWebView 上添加一些 UI 控件,由于这个问题“https://stackoverflow.com/questions/9120868/video-in-nswebview-hide
因此,我正在构建一个程序,该程序的特点是使用 IKImageBrowserView 组件作为 NSWindow 中的 subview 。作为旁注,我有一个名为 ImageBrowserControll
我需要在第一次运行后显示主窗口后立即显示一个工作表对话框。如果我在 init 中执行此操作或从 nib 中唤醒,它似乎无法正常工作(如果我在 init 方法中执行此操作,则工作表显示为与主窗口分离的窗
对于高技能的 Cocoa 程序员来说,这可能是一个简单的问题,但我找不到如何在单独的窗口中控制图形。我仔细阅读了Cocoa相关的书籍,浏览了很多网络笔记,但我找不到解决我的问题的方法。目的是使用专用窗
在 OS X 上是否可以通过编程方式访问缩放或最大化窗口的恢复窗口位置。 即:在大多数 OS X 应用程序中,您可以双击标题栏来缩放它。如果您再次双击它,它会恢复到之前的位置。 我希望能够获取和设置保
我正在以编程方式创建一个需要跨越 2 个屏幕的窗口。正在创建的窗口的大小是正确的,但窗口大约从第一个屏幕的一半开始。我可以将它拖回第一个屏幕的开头,NSWindow 非常适合。 我只需要知道在窗口的起
在 Creating a custom title bar on a standard NSWindow 的帮助下,我一直在尝试为 NSWindow 创建自定义标题栏. NSView *themeFr
当主(唯一)关闭时,如何正确退出 Mac OS X 应用程序? 我知道有一个方法- (void)windowWillClose:(NSNotification *)notification在 NSWi
我有自定义 NSWindow,自定义 NSView 设置为它的 contentView。 窗口被初始化为: [window setOpaque:NO]; [window setBackgroundCo
我正在 Xcode5 中为 Mac OSX 开发一个应用程序 我想全屏显示我的第一个窗口(没有工具栏只是我的 View ) 我找到了一种在角落显示全屏按钮的方法: AppDelegate.m: - (
当 NSWindow 尝试关闭时如何显示 NSAlert?这也必须打开和关闭。 最佳答案 NSWindow 的委托(delegate)有一个 windowShouldClose:方法将允许您自定义它。
Thread Safety Summary developer.apple.com 上声明 NSWindow 是线程安全的*并且可以从工作线程创建。 我有一个工作线程,我创建得相当简单: [NST
我正在尝试创建一个我创建的窗口来接受从取景器拖放到其上的文件,当我尝试将文件拖到窗口上时发生的所有情况都是它会弹回到桌面上的位置。显然我没有设置正确的东西。 在NSWindowController:i
我的 Cocoa 应用程序在屏幕上显示一个透明窗口,但是当用户尝试使用 Mac OS X 的内置屏幕捕获键并可选择选择完整窗口(Command-Shift-4,然后空格键)进行屏幕截图时),我的窗口被
我正在实现一个支持全屏模式的Cocoa应用程序。如果用户在全屏模式下工作时退出,我需要以全屏模式启动应用程序, 启动应用程序时,我检查应用程序是否应以全屏模式启动,然后在 NSWindow 上调用 t
在常见情况下,应用程序的布局将是 TITLE 位于顶部,ViewController 位于底部。但是,我想让我的应用程序具有左右显示功能。 使用分割 View Controller ,标题仍将位于所有
NSWindow 关闭后如何获取事件或通知?我能找到的最近的东西是 NSWindowDelegate 中的 windowWillClose: 方法。但这个方法是在 NSWindow 即将关闭时调用的,
我是一名优秀的程序员,十分优秀!