এটি মূল্যবান কিসের জন্য, কোনও যাদু সংখ্যা ব্যবহার না করেই পাঠ্যের উপরে কেন্দ্রে অবস্থিত চিত্রের এক সাধারণ সমাধান's নোট করুন যে নিম্নলিখিত কোডটি পুরানো এবং আপনার সম্ভবত নীচের আপডেট হওয়া সংস্করণগুলির একটি ব্যবহার করা উচিত :
// the space between the image and text
CGFloat spacing = 6.0;
// lower the text and push it left so it appears centered
// below the image
CGSize imageSize = button.imageView.frame.size;
button.titleEdgeInsets = UIEdgeInsetsMake(
0.0, - imageSize.width, - (imageSize.height + spacing), 0.0);
// raise the image and push it right so it appears centered
// above the text
CGSize titleSize = button.titleLabel.frame.size;
button.imageEdgeInsets = UIEdgeInsetsMake(
- (titleSize.height + spacing), 0.0, 0.0, - titleSize.width);
নীচের সংস্করণে iOS 7+ সমর্থন করার জন্য পরিবর্তনগুলি রয়েছে যা নীচের মন্তব্যে সুপারিশ করা হয়েছে। আমি নিজেই এই কোডটি পরীক্ষা করি নি, সুতরাং আমি নিশ্চিত নই যে এটি কতটা ভাল কাজ করে বা আইওএস-এর পূর্ববর্তী সংস্করণগুলির অধীনে ব্যবহৃত হয় তা ভেঙে যায় কিনা।
// the space between the image and text
CGFloat spacing = 6.0;
// lower the text and push it left so it appears centered
// below the image
CGSize imageSize = button.imageView.image.size;
button.titleEdgeInsets = UIEdgeInsetsMake(
0.0, - imageSize.width, - (imageSize.height + spacing), 0.0);
// raise the image and push it right so it appears centered
// above the text
CGSize titleSize = [button.titleLabel.text sizeWithAttributes:@{NSFontAttributeName: button.titleLabel.font}];
button.imageEdgeInsets = UIEdgeInsetsMake(
- (titleSize.height + spacing), 0.0, 0.0, - titleSize.width);
// increase the content height to avoid clipping
CGFloat edgeOffset = fabsf(titleSize.height - imageSize.height) / 2.0;
button.contentEdgeInsets = UIEdgeInsetsMake(edgeOffset, 0.0, edgeOffset, 0.0);
সুইফ্ট 5.0 সংস্করণ
extension UIButton {
func alignVertical(spacing: CGFloat = 6.0) {
guard let imageSize = imageView?.image?.size,
let text = titleLabel?.text,
let font = titleLabel?.font
else { return }
titleEdgeInsets = UIEdgeInsets(
top: 0.0,
left: -imageSize.width,
bottom: -(imageSize.height + spacing),
right: 0.0
)
let titleSize = text.size(withAttributes: [.font: font])
imageEdgeInsets = UIEdgeInsets(
top: -(titleSize.height + spacing),
left: 0.0,
bottom: 0.0, right: -titleSize.width
)
let edgeOffset = abs(titleSize.height - imageSize.height) / 2.0
contentEdgeInsets = UIEdgeInsets(
top: edgeOffset,
left: 0.0,
bottom: edgeOffset,
right: 0.0
)
}
}