UIButton如何正确调整imageView及titleLabel的位置

前提是你 提交于 2020-01-07 07:43:52

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

   UIImage *buttonImage = [UIImage imageNamed:@"daifukuan-ico"];

    

    CGFloat buttonImageViewWidth = CGImageGetWidth(buttonImage.CGImage);

    

    CGFloat buttonImageViewHeight = CGImageGetWidth(buttonImage.CGImage);

    

    if ([UIScreen mainScreen].scale == 2.0f) {// iOS 4.0+

        

        buttonImageViewWidth *= 0.8f;

        

        buttonImageViewHeight *= 0.8f;

        

    }

    

    NSString *buttonTitle = @"中华人";

    

    UIFont *buttonTitleFont = [UIFont systemFontOfSize:14.0f];

    

    CGSize buttonTitleLabelSize = [buttonTitle sizeWithFont:buttonTitleFont];

    

    // button宽度,至少为imageView宽度与titleLabel宽度之和

    

    CGFloat buttonWidth = buttonImageViewWidth + buttonTitleLabelSize.width;

    

    // button高度,至少为imageView高度与titleLabel高度之和

    

    CGFloat buttonHeight = buttonImageViewHeight + buttonTitleLabelSize.height;

    

    

    

    UIButton *b = [[UIButton alloc] init];

    

    [b setCenter:CGPointMake(140, 140)];

    

    [b setBounds:CGRectMake(0, 0, 90, buttonHeight)];

    

    [b.titleLabel setFont:buttonTitleFont];

    

    [b setBackgroundColor:[UIColor redColor]];

    

    

    

    [b setImage:buttonImage forState:UIControlStateNormal];

    

//    [b.imageView setBackgroundColor:[UIColor greenColor]];

    

    

    

    [b setTitle:buttonTitle forState:UIControlStateNormal];

    

    [b setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];

    

    [b setTitleColor:[UIColor scrollViewTexturedBackgroundColor] forState:UIControlStateHighlighted];

    

    [b.titleLabel setBackgroundColor:[UIColor whiteColor]];

    

    

    

    [self.view addSubview:b];

    

    

    

    CGPoint buttonBoundsCenter = CGPointMake(CGRectGetMidX(b.bounds), CGRectGetMidY(b.bounds));

    

    // 找出imageView最终的center

    

    CGPoint endImageViewCenter = CGPointMake(buttonBoundsCenter.x, CGRectGetMidY(b.imageView.bounds));

    

    // 找出titleLabel最终的center

    

    CGPoint endTitleLabelCenter = CGPointMake(buttonBoundsCenter.x, CGRectGetHeight(b.bounds)-CGRectGetMidY(b.titleLabel.bounds));

    

    // 取得imageView最初的center

    

    CGPoint startImageViewCenter = b.imageView.center;

    

    // 取得titleLabel最初的center

    

    CGPoint startTitleLabelCenter = b.titleLabel.center;

    

    // 设置imageEdgeInsets

    

    CGFloat imageEdgeInsetsTop = endImageViewCenter.y - startImageViewCenter.y;

    

    CGFloat imageEdgeInsetsLeft = endImageViewCenter.x - startImageViewCenter.x;

    

    CGFloat imageEdgeInsetsBottom = -imageEdgeInsetsTop;

    

    CGFloat imageEdgeInsetsRight = -imageEdgeInsetsLeft;

    

    b.imageEdgeInsets = UIEdgeInsetsMake(imageEdgeInsetsTop, imageEdgeInsetsLeft, imageEdgeInsetsBottom, imageEdgeInsetsRight);

    

    // 设置titleEdgeInsets

    

    CGFloat titleEdgeInsetsTop = endTitleLabelCenter.y-startTitleLabelCenter.y;

    

    CGFloat titleEdgeInsetsLeft = endTitleLabelCenter.x - startTitleLabelCenter.x;

    

    CGFloat titleEdgeInsetsBottom = -titleEdgeInsetsTop;

    

    CGFloat titleEdgeInsetsRight = -titleEdgeInsetsLeft;

    

    b.titleEdgeInsets = UIEdgeInsetsMake(titleEdgeInsetsTop, titleEdgeInsetsLeft, titleEdgeInsetsBottom, titleEdgeInsetsRight);

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!