ios中,想要弄个button,图片在上面,文字在下面
打算自己实现自定义的UIButton
但是觉得有点麻烦
想要去看看,能否很方便的用iOS自带的UIButton实现类似的效果
swift button image up title bottom
iphone – Label under image in UIButton – Stack Overflow
看到个:
titleEdgeInsets
和:
imageEdgeInsets
iphone – UIButton Image + Text IOS – Stack Overflow
Pretty UIButtons (in Swift) – Grok Swift
Swift – 自由调整图标按钮中的图标和文字位置(扩展UIButton)
Positioning label under the image in UIButton. | lines of code
用:
<code>extension UIButton { // This method sets an image and title for a UIButton and // repositions the titlePosition with respect to the button image. // Add additionalSpacing between the button image & title as required // For titlePosition, the function only respects UIViewContentModeTop, UIViewContentModeBottom, UIViewContentModeLeft and UIViewContentModeRight // All other titlePositions are ignored func set(image anImage: UIImage?, title: String!, titlePosition: UIViewContentMode, additionalSpacing: CGFloat, state: UIControlState){ self.imageView?.contentMode = .Center self.setImage(anImage, forState: state) positionLabelRespectToImage(title, position: titlePosition, spacing: additionalSpacing) self.titleLabel?.contentMode = .Center self.setTitle(title, forState: state) } private func positionLabelRespectToImage(title: NSString, position: UIViewContentMode, spacing: CGFloat) { let imageSize = self.imageRectForContentRect(self.frame) let titleFont = self.titleLabel?.font! let titleSize = title.sizeWithAttributes([NSFontAttributeName: titleFont!]) var titleInsets: UIEdgeInsets var imageInsets: UIEdgeInsets switch (position){ case .Top: titleInsets = UIEdgeInsets(top: -(imageSize.height + titleSize.height + spacing), left: -(imageSize.width), bottom: 0, right: 0) imageInsets = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: -titleSize.width) case .Bottom: titleInsets = UIEdgeInsets(top: (imageSize.height + titleSize.height + spacing), left: -(imageSize.width), bottom: 0, right: 0) imageInsets = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: -titleSize.width) case .Left: titleInsets = UIEdgeInsets(top: 0, left: -(imageSize.width * 2), bottom: 0, right: 0) imageInsets = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: -(titleSize.width * 2 + spacing)) case .Right: titleInsets = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: -spacing) imageInsets = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0) default: titleInsets = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0) imageInsets = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0) } self.titleEdgeInsets = titleInsets self.imageEdgeInsets = imageInsets } } let NewButtonWidth:CGFloat = screenWidth/3 //2.1 new customer let newCustomerButton:UIButton = UIButton() newCustomerButton.center = CGPointMake(NewButtonWidth/2, HomeNewHeight/2) newCustomerButton.titleLabel?.font = UIFont.boldSystemFontOfSize(14) newCustomerButton.setTitleColor(UIColor.blackColor(), forState: UIControlState.Normal) newCustomerButton.set(image: UIImage(named: "new_customer"), title: "新增客户", titlePosition: .Bottom, additionalSpacing: 10.0, state: .Normal) self.newView.addSubview(newCustomerButton) constrain(newCustomerButton) {newCustomerButton in newCustomerButton.top == newCustomerButton.superview!.top newCustomerButton.left == newCustomerButton.superview!.left newCustomerButton.width == NewButtonWidth newCustomerButton.bottom == newCustomerButton.superview!.bottom newCustomerButton.centerY == newCustomerButton.superview!.centerY } </code>
效果还是不好:
算了,还是自己去实现吧
【总结】
最后用代码:
<code>import UIKit import Cartography class CreateNewButton: UIButton { var newImageView:UIImageView var newLabel:UILabel init(newImage:UIImage, newTitle:String) { self.newImageView = UIImageView() self.newLabel = UILabel() super.init(frame: CGRectZero) self.addSubview(self.newImageView) self.newImageView.image = newImage constrain(newImageView) {newImageView in newImageView.top == newImageView.superview!.top + 12 newImageView.height == self.newImageView.image!.size.height newImageView.centerX == newImageView.superview!.centerX newImageView.width <= newImageView.superview!.width } //for debug // self.newImageView.backgroundColor = UIColor.yellowColor() self.addSubview(self.newLabel) self.newLabel.text = newTitle self.newLabel.textAlignment = .Center self.newLabel.font = UIFont.systemFontOfSize(11) constrain(newLabel, newImageView) {newLabel, newImageView in newLabel.top == newImageView.bottom + 10 newLabel.height == 16 newLabel.width <= newLabel.superview!.width newLabel.centerX == newLabel.superview!.centerX } //for debug // self.newLabel.backgroundColor = UIColor.cyanColor() } required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } } let NewButtonWidth:CGFloat = screenWidth/3 //2.1 new customer let newCustomerButton:UIButton = CreateNewButton(newImage: UIImage(named: "new_customer")!, newTitle: "新增客户") self.newView.addSubview(newCustomerButton) constrain(newCustomerButton) {newCustomerButton in newCustomerButton.top == newCustomerButton.superview!.top newCustomerButton.left == newCustomerButton.superview!.left newCustomerButton.width == NewButtonWidth newCustomerButton.bottom == newCustomerButton.superview!.bottom //newCustomerButton.centerY == newCustomerButton.superview!.centerY } </code>
效果:
转载请注明:在路上 » [已解决]swift中创建图像在上面文字在下面的按钮