我正在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];
但是,这似乎不起作用。我的解决方案有什么不对?
答案 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));
}