- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我似乎无法弄清楚如何让 NSScrollView 中的内容正确缩放。我遇到了一些描述一般方法但没有具体内容的引用资料。
这似乎表明 NSScrollView 和自动布局不能很好地协同工作。这有点说明 iOS 和 OSX 自动布局指南示例都是 UIScrollView 而不是 NSScrollView:
我举了一个例子。主窗口包含一个 Split View,右侧有一些固定内容,左侧有一个将以编程方式填充的 View 。 (我会张贴图片,但我还没有所需的声誉)。运行下面的代码,任何移动拆分器的尝试都会导致它弹回到原来的位置。
AppDelegate.h
#import <Cocoa/Cocoa.h>
@interface AppDelegate : NSObject <NSApplicationDelegate>
@property (weak) IBOutlet NSScrollView *scrollView;
@property (strong, nonatomic) NSView *containerView;
@property (strong, nonatomic) NSMutableDictionary *views;
@property (assign) IBOutlet NSWindow *window;
@end
AppDelegate.m
#import "AppDelegate.h"
@implementation AppDelegate
@synthesize scrollView;
@synthesize containerView;
@synthesize views;
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
// Insert code here to initialize your application
}
-(void)awakeFromNib {
// Create a container to hold all the subviews
containerView = [[NSView alloc] initWithFrame:NSZeroRect];
[containerView setTranslatesAutoresizingMaskIntoConstraints:NO];
[scrollView setDocumentView:containerView];
views = [[NSMutableDictionary alloc] init];
for (int i=0; i<8; i++) {
NSBox *box = [[NSBox alloc] init];
NSString *title = [NSString stringWithFormat:@"Box%@", [[NSNumber numberWithInt:i] stringValue]];
box.title = title;
[views setObject:box forKey:title];
[box setTranslatesAutoresizingMaskIntoConstraints:NO];
[containerView addSubview:box];
}
long height = 160;
NSArray *sortedKeys = [[views allKeys] sortedArrayUsingSelector: @selector(compare:)];
for(NSString *viewName in sortedKeys) {
[containerView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:[[NSString alloc] initWithFormat:@"|-20-[%@]-20-|", viewName] options:0 metrics:nil views:views]];
[containerView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:[[NSString alloc] initWithFormat:@"V:[%@(==%ld)]",viewName, height] options:0 metrics:nil views:views]];
}
// Build the subview-to-subview constraint string
NSString *constraintString = @"V:|";
for(NSString *viewName in sortedKeys) {
constraintString = [constraintString stringByAppendingString:[NSString stringWithFormat:@"-20-[%@]",viewName]];
}
// Subview-to-subview constraints
[containerView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:constraintString options:0 metrics:nil views:views]];
// Container view constraints
NSDictionary *topLevelDictionary = NSDictionaryOfVariableBindings(containerView);
[scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|-0-[containerView]-0-|" options:0 metrics:nil views:topLevelDictionary]];
[scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-0-[containerView]" options:0 metrics:nil views:topLevelDictionary]];
[scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:[[NSString alloc] initWithFormat:@"V:|[containerView(==%ld)]", (long)(20 + height) * sortedKeys.count + 20] options:0 metrics:nil views:topLevelDictionary]];
}
@end
任何方向将不胜感激。
最佳答案
我遇到了同样的问题。 Autolayout 和 NSSplitView
配合得很好,你只需要牺牲正确的鸡种。
尝试将相关拆分部分的持有优先级设置得稍微高一些。该图像显示我最右边的拆分将优先。
还有一个考虑。相关拆分宽度的内容是否受限?您可能需要对其宽度设置一个大于或等于约束,例如 |-0-[mysplitcontent(>=minwidth)]-0-|
关于objective-c - 嵌入 NSSplitView 的 NSScrollView 中的 NSView 的自动布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20810116/
很难用语言来表达这个问题,但一个现实世界的例子会有所帮助。如果您查看 iTunes 应用程序,它似乎有一个用于 Sidebar | 的 NSSplitView。内容拆分,以及用于源列表和图稿面板的嵌套
我有一个水平 NSSplitView,它位于另一个垂直 NSSplitView 的右 subview 的顶部。我有委托(delegate)方法来限制左 subview 调整大小。但对于位于顶部的水平
我有一个 NSSplitView,其中两个 NSView 中都有内容。左侧 NSView 有 2 个约束 - Equal Widths 和 Equal Heights。右边的 NSView 有一些简单
我正在使用 NSSplitView 为 macOS 构建一个应用程序。在 splitview 的顶部框架中,有另一个 NSSplitView,这次是垂直的,用于创建一个三 Pane 窗口。 (顶部两帧
我有一个 NSSplitViewDelegate,并且我限制了 SplitPosition。但是,在边缘情况下,如果我移动光标将分隔线拖离屏幕边缘,则分隔线本身会从 (0, 0) 开始。然而,即使提议
在我的应用程序中,我使用 NSSplitView,它能够使用 - (void)setVertical:(BOOL)flag 方法在垂直和水平布局之间切换。问题是,当用户更改布局时,拆分器总是将其位置恢
我想知道是否有一种方法可以以编程方式更改分离器的位置。 最佳答案 您可以使用 setPosition:ofDividerAtIndex: 更改分隔线的位置 关于cocoa - NSSplitView
仅使用 Xcode 提供的自动布局选项是否可以实现以下目的?例如,通过更改拥抱或压缩设置。 实现这种调整大小行为的推荐方法是什么? 最佳答案 如果你想实现固定的左面板,只需在Interface Bui
我有一个 NSSplitView,它有两个 Pane - 左侧是侧边栏表格 View ,右侧是 Web View 。我还有一个委托(delegate)集,用于处理侧边栏的约束,如下所示: - (CGF
我应该如何在NSSplitView内使用自动布局约束 subview ? 我的NSSplitView subview 有 3 个 subview :topPane , tableContainer和b
我有一个带有两个水平 subview 的 NSSplitView。左边是 NSOutlineView,右边是 NSTableView。左 View 对宽度有两个约束:1) >= 150 和 2) B
我正在尝试了解如何检测 NSSplitView 分隔线上的双击。在我看来,分频器既没有暴露给 NSSplitViewDelegate,也没有暴露给 NSSplitViewController。 到目前
我是 OS X cocoa 开发的新手,正在使用 Storyboards for Yosemite 开发 Swift 应用程序。 在我的应用程序的主窗口中,我有一个 NSSplitViewContro
嵌套NSSplitView实例会导致奇怪的行为。当拖动嵌套 splitView 的拆分器时,父 splitView 的拆分器可以移动以容纳更大的子级,作为拖动的副作用。 这是一个重现此问题的极简项目的
我有一个由自动布局支持的 NSSplitView View ,并且效果很好。但是,我需要能够在代码中设置初始分割位置(因为它将从首选项中恢复)。 我不太清楚如何实现这项工作。在 El Capitan
上下文 我的应用程序中有一个 NSSplitView,它有 3 个 Pane 。我对 NSSplitView 进行了子类化,它有一个覆盖: -(CGFloat) dividerThickness {
我正在尝试以编程方式在 NSSplitView 上添加 NSView (以覆盖它)。每次尝试执行此操作都会导致它作为额外的 subview 添加到 NSSplitview 中。有人可以帮忙吗? 代码:
任何人都可以禁用或防止将鼠标移动到 NSSplitView 的分隔线时更改鼠标光标吗? 我有一个 NSWindow ,里面有 splitView ,然后我尝试将 NSView/NSButton 添加到
我怀疑 NSSplitView 中的分隔符数量等于 [[MySplitViewObject subviews] count] -1 并且 NSSplitView 中任何给定分隔符的索引等于分隔线左侧或
我正在使用 NSSpliView 自动布局,设置如下图 分割 View 位于一个可以调整大小的窗口中,当它调整大小时,分隔线会按50:50的比例变化,如何更改它,以便底部 View 的高度保持不变,顶
我是一名优秀的程序员,十分优秀!