Label under image in UIButton

后端 未结 30 1997
佛祖请我去吃肉
佛祖请我去吃肉 2020-11-29 15:53

I\'m trying to create a button which has some text beneath the icon (sorta like the app buttons) however it seems to be quite difficult to achieve. Any ideas how can I go ab

30条回答
  •  眼角桃花
    2020-11-29 16:22

    Using the code of Kenny Winker's and simeon i make this swift code that works for me.

    import UIKit
    
    @IBDesignable
    class TopIconButton: UIButton {
        override func layoutSubviews() {
            super.layoutSubviews()
    
            let kTextTopPadding:CGFloat = 3.0;
    
            var titleLabelFrame = self.titleLabel!.frame;
    
    
            let labelSize = titleLabel!.sizeThatFits(CGSizeMake(CGRectGetWidth(self.contentRectForBounds(self.bounds)), CGFloat.max))
    
            var imageFrame = self.imageView!.frame;
    
            let fitBoxSize = CGSizeMake(max(imageFrame.size.width, labelSize.width), labelSize.height + kTextTopPadding + imageFrame.size.    height)
    
            let fitBoxRect = CGRectInset(self.bounds, (self.bounds.size.width - fitBoxSize.width)/2, (self.bounds.size.height - fitBoxSize.    height)/2);
    
            imageFrame.origin.y = fitBoxRect.origin.y;
            imageFrame.origin.x = CGRectGetMidX(fitBoxRect) - (imageFrame.size.width/2);
            self.imageView!.frame = imageFrame;
    
            // Adjust the label size to fit the text, and move it below the image
    
            titleLabelFrame.size.width = labelSize.width;
            titleLabelFrame.size.height = labelSize.height;
            titleLabelFrame.origin.x = (self.frame.size.width / 2) - (labelSize.width / 2);
            titleLabelFrame.origin.y = fitBoxRect.origin.y + imageFrame.size.height + kTextTopPadding;
            self.titleLabel!.frame = titleLabelFrame;
            self.titleLabel!.textAlignment = .Center
        }
    
    }
    

提交回复
热议问题