我假设他们正在做的是使用带有自定义绘制的NStableCell的NStableVIEw – 或者它可能是NSSegmentedControl.我试图沿着NStableCell路线走下去.我试图子类化NStableCellVIEw并绘制一个自定义单元格(这都是在init方法中进行测试);
- (ID)init { self = [super init]; if (self) { _checkBox = [[NSbutton alloc] init]; [_checkBox setbuttonType:NSSwitchbutton]; _textvIEw = [[NSTextVIEw alloc] init]; [self addSubvIEw:_checkBox]; [self addSubvIEw:_textvIEw]; [self setTranslatesautoresizingMaskIntoConstraints:NO]; NSDictionary *vIEws = NSDictionaryOfVariableBindings(_checkBox,_textvIEw); [self addConstraints: [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[_checkBox]-[_textvIEw]|" options:0 metrics:nil vIEws:vIEws]]; } return self;}@end
看起来很明显,但它实际上并不起作用.我无法满足约束的错误.是否无法在子类NStableCellVIEw中使用autolayout?
解决方法 虽然您必须向表视图控制器引入一些额外的代码,但这是可能的:- (CGfloat)tableVIEw:(NStableVIEw *)tableVIEw heightOfRow:(NSInteger)row{NStableCellVIEw *rowVIEw = [self.tableVIEw makeVIEwWithIDentifIEr: RVIssueSelectiontableRowVIEwContentKey owner: self];[rowVIEw setobjectValue: yourDataObject]; // or update your cell with the according data the way you prefer[rowVIEw setNeedsLayout: YES];[rowVIEw layoutSubtreeIfNeeded];return [rowVIEw fittingSize].height;}
这将导致单元格更新它的布局,您可以返回它所需的高度.因为这个调用可能有点贵,所以应该缓存计算的单元格高度.这个答案来自另一个我现在找不到的SO答案(当我找到它时会更新解决方案).生成约束的错误消息是因为您强制单元格的高度为x(通过表视图数据源方法).但是你的约束想要设置单元格的高度以使它们满意.两者同时都无法奏效.
总结以上是内存溢出为你收集整理的cocoa – NSView中的Autolayout被用作NSTableView的单元格全部内容,希望文章能够帮你解决cocoa – NSView中的Autolayout被用作NSTableView的单元格所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)