日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

UIButton如何正确调整imageView及titleLabel的位置

發(fā)布時間:2023/12/29 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 UIButton如何正确调整imageView及titleLabel的位置 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?

??

一些開發(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的位置的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。