首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使UIView的子视图居中

如何使UIView的子视图居中
EN

Stack Overflow用户
提问于 2012-06-29 04:00:04
回答 14查看 160.1K关注 0票数 137

我在UIViewm中有一个UIView,我希望内部的UIView总是居中在外部的中间,而不需要调整宽度和高度。

我已经设置了支撑杆和弹簧,使其位于顶部/左侧/右侧/底部,而不设置调整大小。但它仍然不在中心。有什么想法吗?

EN

回答 14

Stack Overflow用户

回答已采纳

发布于 2012-06-29 06:03:04

Objective-C

代码语言:javascript
复制
yourSubView.center = CGPointMake(yourView.frame.size.width  / 2, 
                                 yourView.frame.size.height / 2);

斯威夫特

代码语言:javascript
复制
yourSubView.center = CGPoint(x: yourView.frame.size.width  / 2,
                             y: yourView.frame.size.height / 2)
票数 228
EN

Stack Overflow用户

发布于 2012-06-29 06:08:15

你可以做到这一点,并且它总是有效的:

代码语言:javascript
复制
child.center = [parent convertPoint:parent.center fromView:parent.superview];

对于Swift:

代码语言:javascript
复制
child.center = parent.convert(parent.center, from:parent.superview)
票数 292
EN

Stack Overflow用户

发布于 2015-07-22 22:29:35

在开始之前,让我们先提醒一下,原点是视图的左上角CGPoint。关于视图和父级,有一件重要的事情需要理解。

让我们看一下这个简单的代码,一个视图控制器,它在视图中添加了一个黑色方块:

代码语言:javascript
复制
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的子视图

我们将添加以下代码:

代码语言:javascript
复制
var subSubView = UIView();
subSubView.frame.origin = subView.frame.origin;
subSubView.frame.size = CGSizeMake(20, 20);
subSubView.backgroundColor = UIColor.purpleColor()
subView.addSubview(subSubView)

这就是结果:

因为有这一行:

代码语言:javascript
复制
subSubView.frame.origin = subView.frame.origin;

您希望紫色矩形的原点与它的父矩形(黑色矩形)相同,但它位于它的下方,这是为什么?因为当您将一个视图添加到另一个视图时,subView框架"world“现在是它的父边界矩形,如果您有一个视图,它在主屏幕上的原点是它的所有子视图的坐标(15,15),则左上角将是(0,0)

这就是为什么你总是需要通过它的绑定矩形来引用父元素的原因,这就是它的subViews的“世界”,让我们将这一行修改为:

代码语言:javascript
复制
subSubView.frame.origin = subView.bounds.origin;

看看这个魔术,subSubview现在恰好位于它的父原点:

所以,你喜欢“好吧,我只是想把我的观点放在我父母的观点的中心,这有什么大不了的?”好吧,这没什么大不了的,你只需要将父中心点从它的帧“翻译”到父中心点的边界中心就可以了:

代码语言:javascript
复制
subSubView.center = subView.convertPoint(subView.center, fromView: subSubView);

你实际上是在告诉他“以父母为中心,并将其转换为subSubView世界”。

你会得到这样的结果:

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

https://stackoverflow.com/questions/11251988

复制
相关文章

相似问题

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