ইউআইবাটনের শিরোনাম লেবেলের জন্য কি এক্স, ওয়াই পজিশন সামঞ্জস্য করা সম্ভব?


121

এটা এক্স, জন্য Y অবস্থান সমন্বয় করা সম্ভব titleLabelএকটি এর UIButton?

আমার কোডটি এখানে:

    UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];

    [btn setFrame:CGRectMake(0.0f, 0.0f, 100.0f, 100.0f)];
    [btn setTitle:[NSString stringWithFormat:@"Button %d", i+1] forState:UIControlStateNormal];     
    [btn addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside];
    btn.titleLabel.frame = ???

1
দয়া করে অন্য উত্তরটি চয়ন করুন যাতে আমরা খুব নেতিবাচক উত্তরটি মুছতে পারি। অথবা অন্যথায় আপনি কেন এটি করেছেন তা ব্যাখ্যা করুন।
— tchrist

1
কেন এই উত্তর গৃহীত হয় না?
— আন্তোনিও এমজি

এই আপনার প্রয়োজন হয় stackoverflow.com/questions/18484747/uibutton-titleedgeinsets

উত্তর:


445
//make the buttons content appear in the top-left
[button setContentHorizontalAlignment:UIControlContentHorizontalAlignmentLeft];
[button setContentVerticalAlignment:UIControlContentVerticalAlignmentTop];

//move text 10 pixels down and right
[button setTitleEdgeInsets:UIEdgeInsetsMake(10.0f, 10.0f, 0.0f, 0.0f)];

এবং সুইফটে

//make the buttons content appear in the top-left
button.contentHorizontalAlignment = .Left
button.contentVerticalAlignment = .Top

//move text 10 pixels down and right
button.titleEdgeInsets = UIEdgeInsetsMake(10.0, 10.0, 0.0, 0.0)

সুইফট 5

button.contentHorizontalAlignment = .left
button.contentVerticalAlignment = .top
button.titleEdgeInsets = UIEdgeInsets(top: 10.0, left: 10.0, bottom: 0.0, right: 0.0)

3
এটি অবশ্যই সেরা উত্তর
— গ্রিনিসাস

3
আমি ভাবছি কেন প্রশ্নকর্তা অন্য উত্তরটি বেছে নিয়েছিলেন? এটি একটি আরও ভাল।
— জোশুয়া

4
এমনকি আমার প্রথম দুটি লাইনও প্রয়োজন ছিল না ... setTitleEdgeInsets:পাঠ্যটি প্রায় শিফট করার জন্য আমার প্রয়োজনীয় জিনিসগুলি ছিল।
— আর্টঅফ ওয়ারফেয়ার

এটি অবশ্যই সঠিক, তবে ইন্টারফেস বিল্ডার (আমার উত্তর হিসাবে বর্ণিত) ব্যবহার করে এটি সম্পাদন করা আরও সহজ।
— eladleb

প্রথম দুটি লাইন আপনার পাঠ্যকে 0,0 (x, y) এ রাখে। এটি আপেক্ষিক অবস্থান রোধ করতে পারে; বিশেষত যদি আপনি xib এ ডিফল্ট প্রান্তিককরণ সেট করেন।
— জেরেট বার্নেট

40

দৃশ্যমানভাবে এটি করার সহজতম উপায় হ'ল বৈশিষ্ট্য পরিদর্শক ** (কোনও এক্সিব / স্টোরিবোর্ড সম্পাদনা করার সময় উপস্থিত হয়) ব্যবহার করা, " প্রান্ত " বৈশিষ্ট্যকে শিরোনামে সেট করা, তার পোকামাকড়কে সামঞ্জস্য করা, তারপরে চিত্রে "এজ" বৈশিষ্ট্য নির্ধারণ করা এবং তদনুসারে সামঞ্জস্য করা । এটি কোডিংয়ের চেয়ে এটি সাধারণত ভাল, যেহেতু এটি বজায় রাখা সহজ এবং অত্যন্ত চাক্ষুষ।

বৈশিষ্ট্য পরিদর্শক সেটিং


1
পরিবর্তন Edgeকরতে ভাল ইনপুট Titleএবং তারপরে ইনসেট সামঞ্জস্য করুন!
— ডিন

ভবিষ্যতের রেফারেন্সের জন্য, এক্সকোড 8 থেকে edgeসম্পত্তি নির্ধারণের পরিবর্তে আপনি আকার পরিদর্শকের শিরোনাম ইনসেটগুলি সামঞ্জস্য করতে পারেন।
— dbmrq

14

ইউআইবাটন থেকে প্রাপ্ত এবং নিম্নলিখিত পদ্ধতিটি প্রয়োগ করুন:

- (CGRect)titleRectForContentRect:(CGRect)contentRect;

সম্পাদনা:

@interface PositionTitleButton : UIButton
@property (nonatomic) CGPoint titleOrigin;
@end

@implementation PositionTextButton
- (CGRect)titleRectForContentRect:(CGRect)contentRect {
  contentRect.origin = titleOrigin;
  return contentRect;
}
@end

ধন্যবাদ, এটি আসলে আমার প্রয়োজন ছিল। স্বয়ংক্রিয় কেন্দ্রীকরণ যথেষ্ট ছিল না।
— dmzza

4

আমার প্রকল্পগুলির জন্য আমি এই এক্সটেনশন ইউটিলিটিটি করেছি:

extension UIButton {

    func moveTitle(horizontal hOffset: CGFloat, vertical vOffset: CGFloat) {
        self.titleEdgeInsets.left += hOffset
        self.titleEdgeInsets.top += vOffset
    }

}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.