【发布时间】:2014-09-08 07:08:41
【问题描述】:
我正在尝试以编程方式在NSScrollView 中设置NSTextView,但遇到了问题。
具体来说,我无法滚动文本视图;滚动视图似乎认为“这就是全部”。当您尝试向下滚动查看其余内容(不释放)时,结果如下:
一旦你释放,滚动视图就会反弹回来,所以这不是图形故障;它只是在框架高度处剪辑文本视图。
我尝试过使用the Apple 'Text In ScrollView' docs 和setVerticallyResizable: 等进行试验。
代码:
- (void)configureValueTextView
{
NSScrollView *vfContainer = [[NSScrollView alloc] initWithFrame:(NSRect){0,0,50,50}];
vfContainer.hasVerticalScroller = YES;
vfContainer.hasHorizontalScroller = NO;
vfContainer.translatesAutoresizingMaskIntoConstraints = NO;
_valueFieldContainer = vfContainer;
vfContainer.borderType = NSLineBorder;
NSTextView *valueField = _valueField = [[NSTextView alloc] initWithFrame:(NSRect){0,0,vfContainer.contentSize}];
valueField.delegate = self;
valueField.minSize = (NSSize){0,0};
valueField.maxSize = (NSSize){FLT_MAX, FLT_MAX};
[valueField setVerticallyResizable:YES];
[valueField setHorizontallyResizable:YES];
valueField.translatesAutoresizingMaskIntoConstraints = NO;
valueField.string = _value ? _value : @"";
valueField.editable = YES;
valueField.textContainer.containerSize = (NSSize) { vfContainer.contentSize.width, FLT_MAX };
valueField.textContainer.heightTracksTextView = NO;
vfContainer.documentView = valueField;
[vfContainer addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-(0)-[_valueField]-(0)-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_valueField)]];
[vfContainer addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-(0)-[_valueField]-(0)-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_valueField)]];
}
框架稍后会调整为正确的值,
[_valueFieldContainer setFrame:(NSRect){kKEFormFieldViewKeyWidth + 10, 0, valueFieldWidth, h}];
[_valueField setFrame:(NSRect){0, 0, valueFieldWidth, h}];
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-(0)-[_valueFieldContainer]-(5)-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_valueFieldContainer)]];
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-(0)-[_keyField]-(10)-[_valueFieldContainer]-(0)-|" options:0 metrics:nil views:@{@"_keyField": _keyField, @"_valueFieldContainer": _valueFieldContainer}]];
就是这样。欢迎提示!
【问题讨论】:
-
您已经设置了一个垂直约束,使文本视图与其父视图(滚动视图的剪辑视图)的高度相匹配。我认为这就是问题所在。您是否尝试过仅使用旧式自动调整大小掩码而不是文本视图的自动布局?
-
我尝试移除垂直限制,但当我这样做时,滚动视图变为空白。我将文本视图切换到旧的自动布局并做了
valueField.autoresizingMask = NSViewWidthSizable;并删除了两个自动布局的东西,突然一切都完美了。介意写一个答案让我接受吗?
标签: objective-c macos cocoa nstextview nsscrollview