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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (74)

我正在开发一个程序,我在其中以编程方式将NSImageView添加到自定义NSView类。在创建图像视图时,我传递父容器的框架。

-(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方法将其添加到自定义视图中。问题是图像粘在父视图的左下角。如何将此图像放在父视图的中心?

我已经尝试在帧原点上添加一个偏移量,但是当调整窗口大小时,或者加载了不同大小的图像时,这实际上并不起作用。

任何帮助,将不胜感激。

提问于
用户回答回答于

我不确定这是否是最好的方法,但是当我想将子视图置于其父级中心时,我只是做简单的数学运算。

如果希望它保持居中,则需要将所有边距设置为可自动调整大小。

[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:则只需使用上述逻辑来计算框架原点值。

用户回答回答于

试试这个。在.h

@property(强,非原子)IBOutlet UIView * CoinsPurchaseView;

在.m

self.CoinsPurchaseView.center = self.view.center;
    [self.view addSubview:self.CoinsPurchaseView];

扫码关注云+社区

领取腾讯云代金券