Objective c NSM矩阵绘制外部边界
我有一个相当简单的自定义视图类,它包含在NSSplitView中。该视图类通过添加一个NSMatrix和两个虚拟单元来初始化自身。真正奇怪的是,尽管它的大小足以填满superview,但实际上它比superview要高得多、宽得多。我试图记录帧和边界,结果也在下面,但我被难住了。为什么这个尺寸不符合我的预期Objective c NSM矩阵绘制外部边界,objective-c,cocoa-touch,cocoa,Objective C,Cocoa Touch,Cocoa,我有一个相当简单的自定义视图类,它包含在NSSplitView中。该视图类通过添加一个NSMatrix和两个虚拟单元来初始化自身。真正奇怪的是,尽管它的大小足以填满superview,但实际上它比superview要高得多、宽得多。我试图记录帧和边界,结果也在下面,但我被难住了。为什么这个尺寸不符合我的预期 您既没有设置自动布局约束,也没有设置老式的springs-n-struts,以使矩阵保持其父视图的边缘 我怀疑您正在运行状态恢复,因此在启动时,将以一个大小创建父视图,然后状态恢复,窗
您既没有设置自动布局约束,也没有设置老式的springs-n-struts,以使矩阵保持其父视图的边缘 我怀疑您正在运行状态恢复,因此在启动时,将以一个大小创建父视图,然后状态恢复,窗口/拆分视图调整大小,子视图不再与其父视图匹配
一般来说,如果您自己创建一个视图,请立即添加约束(或者调用
-setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable
[在本例中]如果您不使用autolayout)。您完全正确。。我把它拉出来是为了追逐其他问题,但忘了重新插入。。非常感谢。
- (id)initWithFrame:(NSRect)frame
{
self = [super initWithFrame:frame];
if (self) {
NSImageCell *prototypeCell = [[NSImageCell alloc] init];
[prototypeCell setBordered:YES];
_matrix = [[NSMatrix alloc] initWithFrame:self.bounds
mode:NSHighlightModeMatrix
prototype:prototypeCell
numberOfRows:1
numberOfColumns:1];
[_matrix setCellSize:NSMakeSize(50, 50)];
[_matrix setBackgroundColor:[NSColor redColor]];
_matrix.drawsBackground = YES;
[_matrix addRow];
NSCell *cell = [_matrix cellAtRow:0 column:0];
[cell setImage:[NSImage imageNamed:@"block.png"]];
cell = [_matrix cellAtRow:1 column:0];
[cell setImage:[NSImage imageNamed:@"block.png"]];
[self addSubview:_matrix];
NSLog(@"%@", NSStringFromRect(self.bounds));
NSLog(@"%@", NSStringFromRect(self.frame));
NSLog(@"%@", NSStringFromRect(_matrix.bounds));
NSLog(@"%@", NSStringFromRect(_matrix.frame));
}
return self;
}
Output:
2014-02-15 15:16:23.458 Temp[5970:303] {{0, 0}, {45, 331}}
2014-02-15 15:16:23.459 Temp[5970:303] {{500, 0}, {45, 331}}
2014-02-15 15:16:23.459 Temp[5970:303] {{0, 0}, {45, 331}}
2014-02-15 15:16:23.459 Temp[5970:303] {{0, 0}, {45, 331}}