首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将子视图与父NSView的中心对齐

如何将子视图与父NSView的中心对齐
EN

Stack Overflow用户
提问于 2011-01-13 22:34:44
回答 1查看 14.3K关注 0票数 14

我正在开发一个程序,在该程序中,我以编程方式向自定义NSView类添加了一个NSImageView。在创建image-view时,我传递了父容器的框架。

代码语言:javascript
复制
-(NSImageView *)loadNSImage:(NSString *)imageName frame:(NSRect)frame{
    imageName = [[NSBundle mainBundle] pathForResource:imageName ofType:@"png"];
    NSImage *image = [[NSImage alloc] initWithContentsOfFile:imageName]; 
    NSImageView *imageView = [[NSImageView alloc]initWithFrame:frame];
    [imageView setImage:image];
    [imageView setImageScaling:NSImageScaleProportionallyUpOrDown];
    [imageView setAutoresizingMask:NSViewHeightSizable | NSViewWidthSizable | NSViewMaxXMargin | NSViewMaxYMargin | NSViewMinXMargin | NSViewMinYMargin];
    [imageView setImageAlignment:NSImageAlignCenter];
    [image release];
    return imageView;
}

然后,我使用addSubView方法将其添加到自定义视图中。问题是图像会粘在父视图的左下角。如何将此图像放在父视图的中心?

我试过在框架原点添加一个偏移量,但是当窗口调整大小时,或者加载了一个不同大小的图像时,这并不能真正起作用。

任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-01-13 23:21:35

我不确定这是否是最好的方法,但当我想要将一个子视图放在它的父视图中时,我只需要做简单的数学运算。

如果你想让它居中,你需要将所有的页边距设置为可自动调整大小。

代码语言:javascript
复制
[subview setFrameOrigin:NSMakePoint(
  round((NSWidth([parentView bounds]) - NSWidth([subview frame])) / 2),
  round((NSHeight([parentView bounds]) - NSHeight([subview frame])) / 2)
)];
[subview setAutoresizingMask:NSViewMinXMargin | NSViewMaxXMargin | NSViewMinYMargin | NSViewMaxYMargin];

这只是计算获得居中原点所需的边距。

如果在调用initWithFrame:之前需要居中的框架,那么只需使用上面的逻辑来计算框架原始值。

票数 41
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4681176

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档