【发布时间】:2014-10-26 03:55:31
【问题描述】:
我正在尝试使用 NSScrollView + NSClipView 将子类 NSView 限制为实时调整大小。但是,即使窗口变小,子类 NSView 也需要具有最小尺寸。我已经实现了以下代码来执行此操作,它可以工作,除了它限制窗口的大小小于设置的最小值。我已经阅读了 Apple 的文献并搜索了通常的网络出没,以查找有关为什么此代码限制一切无济于事的信息。我已将必需的 - (BOOL)translatesAutoresizingMaskIntoConstraints {return NO;} 添加到子类 NSView。谁能建议为什么会发生这种情况,或者我可以在哪里了解更多关于这些视图如何与 NSLayoutConstraint 交互的信息。我受阻了。代码如下:
设置约束的代码是:
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
....
NSRect windowFrame = NSScreen.mainScreen.visibleFrame;
windowFrame.size.width = pageSize.width+80;
[_window setFrame:windowFrame display:NO];
canvas = [[PVDCanvasView alloc] init];
[scrollView setDocumentView:canvas];
[scrollView addConstraint:
[NSLayoutConstraint constraintWithItem:canvas // sets left side of canvas
attribute:NSLayoutAttributeLeft
relatedBy:NSLayoutRelationEqual
toItem:scrollView
attribute:NSLayoutAttributeLeft
multiplier:1
constant:0]];
[scrollView addConstraint:
[NSLayoutConstraint constraintWithItem:canvas // sets top of canvas
attribute:NSLayoutAttributeTop
relatedBy:NSLayoutRelationEqual
toItem:scrollView
attribute:NSLayoutAttributeTop
multiplier:1
constant:0]];
[scrollView addConstraint:
[NSLayoutConstraint constraintWithItem:canvas // sets canvas width to width of scroll view
attribute:NSLayoutAttributeWidth
relatedBy:NSLayoutRelationEqual
toItem:scrollView
attribute:NSLayoutAttributeWidth
multiplier:1
constant:0]];
[canvas addConstraint:
[NSLayoutConstraint constraintWithItem:canvas // sets minimum canvas width
attribute:NSLayoutAttributeWidth
relatedBy:NSLayoutRelationGreaterThanOrEqual
toItem:nil
attribute:NSLayoutAttributeNotAnAttribute
multiplier:1
constant:pageSize.width+40]];
[canvas addConstraint:
[NSLayoutConstraint constraintWithItem:canvas // sets initial height
attribute:NSLayoutAttributeHeight
relatedBy:NSLayoutRelationEqual
toItem:nil
attribute:NSLayoutAttributeNotAnAttribute
multiplier:1
constant:pageSize.height+40]];
}
【问题讨论】:
标签: macos cocoa nslayoutconstraint