UIButton如何正确调整imageView及titleLabel的位置
?
| ? | ? |
一些開發(fā)者知道通過imageEdgeInsets及titleEdgeInsets 可以調整imageView及titleLabel的位置,但不知道如何正確計算,基本上都是通過多次調整相應的值達到期望的目標(次數(shù)過多可能會失去信 心),究其原因就是不能正確理解imageEdgeInsets及titleEdgeInsets.
下面步入主題.
如果button的bounds足夠大(寬度至少是imageView寬度與titleLabel寬度之和,高度至少為imageView高度與titleLabel高度中的最大值),那么就可以同時顯示imageView及titleLabel,如下圖:
如果,想要得到imageView及titleLabel都居中顯示,且要達到imageView在上,titleLabel在下的效果(通過設置imageView及titleLabel的frame是無法達到這樣的效果的),如下圖:
此時,button的bounds也要足夠大(寬度至少是imageView寬度與titleLabel寬度之和,高度至少為imageView高度與titleLabel高度之和),并且,需要修改button的imageEdgeInsets及titleEdgeInsets.可參考下面的代碼:
?
// 這里的圖片,必須有Xcode.png及Xcode@2x.png,便于得到正確的以設備點為單位的寬度及高度
?UIImage *buttonImage = [UIImage imageNamed:@"Xcode"];
?CGFloat buttonImageViewWidth = CGImageGetWidth(buttonImage.CGImage);
?CGFloat buttonImageViewHeight = CGImageGetWidth(buttonImage.CGImage);
?if ([UIScreen mainScreen].scale == 2.0f) {// iOS 4.0+
? ? ?buttonImageViewWidth *= 0.5f;
? ? ?buttonImageViewHeight *= 0.5f;
?}
?NSString *buttonTitle = @"中華人民共和國";
?UIFont *buttonTitleFont = [UIFont systemFontOfSize:17.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(160, 160)];
?[b setBounds:CGRectMake(0, 0, buttonWidth, 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);
?[b release];
轉載于:https://www.cnblogs.com/feife/p/4732885.html
總結
以上是生活随笔為你收集整理的UIButton如何正确调整imageView及titleLabel的位置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何选择数据共享方案?
- 下一篇: RFID资产管理,实现资产管理智能化--