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


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.