ios – 创建UIButton(UIButtonTypeCustom),顶部带有图像,底部带有AutoLayout标签

我试图在它的底部显示带有文本(单/多行)的按钮.顶部的图像(必须看起来是圆形的);图像&单击时必须突出显示文本.像这样:

这是viewDidLoad中的代码

btArtAndPainting = [UIButton buttonWithType:UIButtonTypeCustom];
btArtAndPainting.backgroundColor = [[UIColor cyanColor] colorWithAlphaComponent:1.00f];

btArtAndPainting.translatesAutoresizingMaskIntoConstraints = NO;
self.vwContainer.translatesAutoresizingMaskIntoConstraints = NO;

[self.vwContainer addSubview:btArtAndPainting];

[btArtAndPainting setimage:[UIImage imageNamed:kIMGCategoryArtAndPaintingnormal] forState:UIControlStatenormal];
[btArtAndPainting setimage:[UIImage imageNamed:kIMGCategoryArtAndPaintingHighlighted] forState:UIControlStateHighlighted];

[btArtAndPainting setTitle:@"Art and Painting" forState:UIControlStatenormal];
[btArtAndPainting setTitle:@"Art and Painting" forState:UIControlStateHighlighted];

btArtAndPainting.tintColor = [UIColor redColor];
btArtAndPainting.titleLabel.font = [UIFont systemFontOfSize:10.00f];
btArtAndPainting.titleLabel.textColor = [UIColor whiteColor];
btArtAndPainting.titleLabel.textAlignment = NSTextAlignmentCenter;
btArtAndPainting.titleLabel.lineBreakMode = NSLineBreakByWordWrapping | NSLineBreakByTruncatingTail;
btArtAndPainting.titleLabel.numberOfLines = 0;
btArtAndPainting.imageEdgeInsets = UIEdgeInsetsMake(0.00f,8.00f,20.00f,8.00f);
btArtAndPainting.titleEdgeInsets = UIEdgeInsetsMake(32.00f,0.00f,0.00f);

NSArray *constraintsWidth = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-10-[btArtAndPainting(60)]|"
                                                                     options:0
                                                                     metrics:nil
                                                                       views:viewDictionary];

NSArray *constraintsHeight = [NSLayoutConstraint constraintsWithVisualFormat:@"V:[searchBar]-10-[btArtAndPainting(60)]"
                                                                    options:0
                                                                    metrics:nil
                                                                      views:viewDictionary];

[self.vwContainer addConstraints:constraintsHeight];
[self.vwContainer addConstraints:constraintsWidth];

[btArtAndPainting layoutIfNeeded];
[btArtAndPainting needsUpdateConstraints];

问题是文本根本不显示(在正常和突出显示的状态下).请参阅下面的链接图像.
如何使用UIEdgeInset为文本腾出空间?我也试过创建一个UIButton类,但效果大致相同.

解决方法

请使用以下代码设置插图,
CGFloat spacing = 1.0;
CGSize imageSize = btArtAndPainting.imageView.frame.size;
btArtAndPainting.titleEdgeInsets = UIEdgeInsetsMake(0.0,- imageSize.width,- (imageSize.height + spacing),0.0);
CGSize titleSize = btArtAndPainting.titleLabel.frame.size;
btArtAndPainting.imageEdgeInsets = UIEdgeInsetsMake(- (titleSize.height + spacing),0.0,- titleSize.width);

希望这可以帮助..

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...