我在UIView
m中有一个UIView
,我希望内部的UIView
总是居中在外部的中间,而不需要调整宽度和高度。
我已经设置了支撑杆和弹簧,使其位于顶部/左侧/右侧/底部,而不设置调整大小。但它仍然不在中心。有什么想法吗?
发布于 2012-06-29 06:03:04
Objective-C
yourSubView.center = CGPointMake(yourView.frame.size.width / 2,
yourView.frame.size.height / 2);
斯威夫特
yourSubView.center = CGPoint(x: yourView.frame.size.width / 2,
y: yourView.frame.size.height / 2)
发布于 2012-06-29 06:08:15
你可以做到这一点,并且它总是有效的:
child.center = [parent convertPoint:parent.center fromView:parent.superview];
对于Swift:
child.center = parent.convert(parent.center, from:parent.superview)
发布于 2015-07-22 22:29:35
在开始之前,让我们先提醒一下,原点是视图的左上角CGPoint
。关于视图和父级,有一件重要的事情需要理解。
让我们看一下这个简单的代码,一个视图控制器,它在视图中添加了一个黑色方块:
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
createDummyView()
super.view.backgroundColor = UIColor.cyanColor();
}
func createDummyView(){
var subView = UIView(frame: CGRect(x: 15, y: 50, width: 50 , height: 50));
super.view.addSubview(subView);
view.backgroundColor = UIColor.blackColor()
}
}
这将创建此视图:黑色矩形原点和中心与其父对象的坐标相同
现在,让我们尝试添加subView的另一个SubSubView,并为subSubview提供与subView相同的来源,但使subSubView成为subView的子视图
我们将添加以下代码:
var subSubView = UIView();
subSubView.frame.origin = subView.frame.origin;
subSubView.frame.size = CGSizeMake(20, 20);
subSubView.backgroundColor = UIColor.purpleColor()
subView.addSubview(subSubView)
这就是结果:
因为有这一行:
subSubView.frame.origin = subView.frame.origin;
您希望紫色矩形的原点与它的父矩形(黑色矩形)相同,但它位于它的下方,这是为什么?因为当您将一个视图添加到另一个视图时,subView框架"world“现在是它的父边界矩形,如果您有一个视图,它在主屏幕上的原点是它的所有子视图的坐标(15,15),则左上角将是(0,0)
这就是为什么你总是需要通过它的绑定矩形来引用父元素的原因,这就是它的subViews的“世界”,让我们将这一行修改为:
subSubView.frame.origin = subView.bounds.origin;
看看这个魔术,subSubview现在恰好位于它的父原点:
所以,你喜欢“好吧,我只是想把我的观点放在我父母的观点的中心,这有什么大不了的?”好吧,这没什么大不了的,你只需要将父中心点从它的帧“翻译”到父中心点的边界中心就可以了:
subSubView.center = subView.convertPoint(subView.center, fromView: subSubView);
你实际上是在告诉他“以父母为中心,并将其转换为subSubView世界”。
你会得到这样的结果:
https://stackoverflow.com/questions/11251988
复制相似问题