尝试将视图置于其超级视图中

时间:2016-09-11 16:56:40

标签: ios objective-c uiview

我正在UIView创建一个类别,以便以编程方式定位和调整视图大小。我想创建一个方法,将给定视图在superview中水平或垂直居中。所以我可以做类似以下的事情:

分类

- (void)centerHorizontally {
    self.center = CGPointMake(self.window.superview.center.x, self.center.y);
}

- (void)centerVertically {
    self.center = CGPointMake(self.center.x, self.window.superview.center.y);
}

使用

UIView *v = [[UIView alloc] initWithFrame:CGRectMake(0,0,100,100)];
[v centerHorizontally];

但是,这似乎不起作用。我的解决方案有什么不对?

1 个答案:

答案 0 :(得分:2)

您需要先将视图添加到父视图中,然后才能使其居中。

UIView *v = [[UIView alloc] initWithFrame:CGRectMake(0,0,100,100)];
[someOtherView addSubview:v];
[v centerHorizontally];

您的类别不正确。不要涉及窗口。您需要将其基于superview的大小:

- (void)centerHorizontally {
    self.center = CGPointMake(self.superview.bounds.size.width / 2.0, self.center.y);
    // or
    self.center = CGPointMake(CGRectGetMidX(self.superview.bounds), self.center.y);
}

- (void)centerVertically {
    self.center = CGPointMake(self.center.x, self.superview.bounds.size.height / 2.0);
    // or
    self.center = CGPointMake(self.center.x, CGRectGetMidY(self.superview.bounds));
}