Button 图片和标题位置居中问题

本文介绍了一种在iOS开发中实现按钮上的图片和文字水平居中的方法,通过调整button.title和button.image及其edgeInsets属性来确保二级菜单按钮的美观。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

针对按钮的图片和标题的居中问题,


像微信公众帐号带有二级菜单的按钮,图片和标题合起来居中,这就用到了,button.title 和button.image 以及他们的 edgeInsets


以下是文本和图片从上到下排列,都水平居中的代码,当然也可以另外使用imageView贴到button上,效果是一样的。

        //按钮的中心
        CGPoint buttonBoundsCenter = CGPointMake(CGRectGetMidX(firstLevelBtn.bounds), CGRectGetMidY(firstLevelBtn.bounds));
        //找出imageView最终的center
        CGPoint endImageViewCenter = CGPointMake(buttonBoundsCenter.x, CGRectGetMidY(firstLevelBtn.imageView.bounds));
        //取得imageView最初的center
        CGPoint startImageViewCenter = firstLevelBtn.imageView.center;
        CGFloat imageEdgeInsetsLeft = endImageViewCenter.x - startImageViewCenter.x;
        CGFloat imageEdgeInsetsTop  = endImageViewCenter.y - startImageViewCenter.y+6.5;
        CGFloat imageEdgeInsetsBottom = -imageEdgeInsetsTop;
        CGFloat imageEdgeInsetsRight  = -imageEdgeInsetsLeft;
        firstLevelBtn.imageEdgeInsets = UIEdgeInsetsMake(imageEdgeInsetsTop, imageEdgeInsetsLeft, imageEdgeInsetsBottom, imageEdgeInsetsRight);
     
        // 设置titleEdgeInsets
        // 找出titleLabel最终的center
        CGPoint endTitleLabelCenter = CGPointMake(buttonBoundsCenter.x, CGRectGetHeight(firstLevelBtn.bounds)-CGRectGetMidY(firstLevelBtn.titleLabel.bounds));
            // 取得titleLabel最初的center
        CGPoint startTitleLabelCenter = firstLevelBtn.titleLabel.center;
        CGFloat titleEdgeInsetsTop = endTitleLabelCenter.y-startTitleLabelCenter.y-11-3.5;
        CGFloat titleEdgeInsetsLeft = endTitleLabelCenter.x - startTitleLabelCenter.x;
        CGFloat titleEdgeInsetsBottom = -titleEdgeInsetsTop;
        CGFloat titleEdgeInsetsRight = -titleEdgeInsetsLeft;
        
        firstLevelBtn.titleEdgeInsets = UIEdgeInsetsMake(titleEdgeInsetsTop, titleEdgeInsetsLeft, titleEdgeInsetsBottom, titleEdgeInsetsRight);


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值