美文网首页
iOS 之 UIButton 中图片在文字上方的完美解决方案

iOS 之 UIButton 中图片在文字上方的完美解决方案

作者: willokyes | 来源:发表于2019-02-17 15:44 被阅读0次
    • Swift
    
    import Foundation
    import UIKit
    
    enum UIButtonImageTitlePositionType {
        case imageLeftTitleRight
        case imageRightTitleLeft
        case imageUpTitleDown
        case imageDownTitleUp
    }
    
    extension UIButton {
        func adjustsImageTitlePosition(type: UIButtonImageTitlePositionType = .imageUpTitleDown, spacing: CGFloat = 6.0) {
            switch type {
            case .imageUpTitleDown:
                guard let imageSize = self.imageView?.image?.size,
                    let text = self.titleLabel?.text,
                    let font = self.titleLabel?.font else {
                        return
                }
                
                self.titleEdgeInsets = UIEdgeInsets(top: 0.0, left: -imageSize.width, bottom: -(imageSize.height + spacing), right: 0.0)
                
                let labelString = NSString(string: text)
                let titleSize = labelString.size(withAttributes: [NSAttributedString.Key.font: font])
                self.imageEdgeInsets = UIEdgeInsets(top: -(titleSize.height + spacing), left: 0.0, bottom: 0.0, right: -titleSize.width)
                
                let edgeOffset = abs(titleSize.height - imageSize.height) / 2.0;
                self.contentEdgeInsets = UIEdgeInsets(top: edgeOffset, left: 0.0, bottom: edgeOffset, right: 0.0)
            default:
                break
            }
        }
    }
    
    
    • Objective-C
    / the space between the image and text
    CGFloat spacing = 6.0;
    
    // lower the text and push it left so it appears centered 
    //  below the image
    CGSize imageSize = button.imageView.image.size;
    button.titleEdgeInsets = UIEdgeInsetsMake(
      0.0, - imageSize.width, - (imageSize.height + spacing), 0.0);
    
    // raise the image and push it right so it appears centered
    //  above the text
    CGSize titleSize = [button.titleLabel.text sizeWithAttributes:@{NSFontAttributeName: button.titleLabel.font}];
    button.imageEdgeInsets = UIEdgeInsetsMake(
      - (titleSize.height + spacing), 0.0, 0.0, - titleSize.width);
    
    // increase the content height to avoid clipping
    CGFloat edgeOffset = fabsf(titleSize.height - imageSize.height) / 2.0;
    button.contentEdgeInsets = UIEdgeInsetsMake(edgeOffset, 0.0, edgeOffset, 0.0);
    
    

    参考:

    相关文章

      网友评论

          本文标题:iOS 之 UIButton 中图片在文字上方的完美解决方案

          本文链接:https://www.haomeiwen.com/subject/aivgeqtx.html