ইউআইবাটন কন্টেন্ট মোড সেটিং শুনে না?


92

ফার্স্টবাটন কাস্টম টাইপের একটি ইউআইবাটন B আমি প্রোগ্রামের মাধ্যমে তাদের তিনটি একটি টেবিলের প্রতিটি কক্ষ জুড়ে রাখছি, এভাবে:

[firstButton setImage:markImage forState:UIControlStateNormal];
[firstButton setContentMode:UIViewContentModeScaleAspectFit];
[cell.contentView addSubview:firstButton];

অন্য কোথাও, আমি এটি ক্লিপটোবাউন্ডগুলিতে বলছি। আমি যা পাই তা হ'ল চিত্রটির কেন্দ্রিক বর্গক্ষেত্রের ফসল, এটির দিকটি-আকারযুক্ত রেন্ডারিংয়ের চেয়ে। ফার্স্ট বাটন.আইমেজভিউতে মোডের সম্পত্তি নির্ধারণ সহ আমি প্রচুর উপায়ে চেষ্টা করেছি, যা কাজ করে বলে মনে হয় না।


4
নীচে ক্রিস নোলেট দ্বারা সমাধান দেখুন: বাটন.কন্টেন্টভের্টিকাল অ্যালাইনমেন্ট = ইউআইসিএন্ট্রোলকন্টেন্টিরিচাল্টিলাইনমেন্টটপ;
ম্যাট

দেখুন stackoverflow.com/a/28205566/481207 যা শো উভয় contentVerticalAlignment সেটিং এবং contentHorizontalAlignment UIViewContentModeScaleAspectFit জন্য প্রয়োজন।
ম্যাট

উত্তর:


187

আমারও একই সমস্যা ছিল। আমি দেখতে পাচ্ছি যে এই প্রশ্নটি একটু পুরানো, তবে যখন আমি তাদের অনুসন্ধানের ফলাফলগুলিতে পপ আপ করি তখন আমি অন্যান্য লোকদের (আমার মতো) সংরক্ষণ করার জন্য একটি স্পষ্ট এবং সঠিক উত্তর দিতে চাই।

এটি আমাকে অনুসন্ধান এবং পরীক্ষায় কিছুটা সময় নিয়েছিল, তবে আমি সমাধানটি পেয়েছি। UIButton এর অভ্যন্তরে থাকা "লুকানো" ইমেজভিউয়ের কন্টেন্টমোডটি কেবল সেট করুন।

[[firstButton imageView] setContentMode: UIViewContentModeScaleAspectFit];
[firstButton setImage:[UIImage imageNamed:imageName] forState:UIControlStateNormal];

ড্যান রে তার গ্রহণযোগ্য উত্তরে সম্ভবত এটিই ইঙ্গিত দিচ্ছিলেন, তবে আমার সন্দেহ নেই।


4
না, তা হয়নি। আমি যে সমাধানটি স্থির করেছি তা হ'ল চিত্রটি ধরে রাখার জন্য একটি ইউআইআইজেইভিউ ভিউ ব্যবহার করা, তারপরে একটি পরিষ্কার, ট্রান্সপার্যান্ট ইউআইবাটন তার "কাস্টম" টাইপের টাইপ করুন।
ড্যান রে

ডেভ, কমপক্ষে আইওএস 3..২ এ, আপনার সমাধান আমার পক্ষে কাজ করে না বলে মনে হচ্ছে। খুব খারাপ, কারণ আমি "ফ্রি" ক্লিক করে ছবিটি হাইলাইট করার আশা করছিলাম। এমনকি আমি নিশ্চিত করেছিলাম যে বোতাম.আইমেজভিউ যেখানে আমি কন্টেন্টমোড সেট করছি সেখানে ছিল না, এবং আপনি যেমন করছেন কনটেন্টমোড সেট করার পরে চিত্রটি সেট করুন।
জ্যাক

4
কেবল পরিষ্কার করার জন্য, "কাজ করে না" এর অর্থ "চিত্রটি সম্পূর্ণ রেজোলিউশনে দেখানো হয়েছে, যেমনটি আমি প্রত্যাশা করছিলাম তেমন ছোট করা হয়নি"।
জ্যাক

জ্যাকস, উপরেরগুলি আইওএস ৪.x এ আমার জন্য কাজ করে। দুর্ভাগ্যক্রমে, আমি v3.2 টার্গেট দিয়ে নির্মাণের সময় "পুনরায় আকার দেবো না" ইস্যুটি পুনরুত্পাদন করতে পারি। আমি ইউআইবাটন ভিউর ফ্রেমের আকার পরিবর্তন করার চেষ্টা করেছি, তবে এটি কোনওরকমই সাহায্য করবে বলে মনে হচ্ছে না। উঃ
ডেভ

4
নীচে ক্রিস নোলেট দ্বারা সমাধান দেখুন: বাটন.কন্টেন্টভের্টিকাল অ্যালাইনমেন্ট = ইউআইসিএন্ট্রোলকন্টেন্টিরিচাল্টিলাইনমেন্টটপ;
ম্যাট

74

আপনি যদি ইউআইবাটন এর চিত্রটির (এটি ব্যাকগ্রাউন্ড ইমেজের বিপরীতে) ডিল করছেন, তবে কন্টেন্টমোডটি ইউআইবাটন নিজেই বা তার চিত্রটিতে স্থাপনের কোনও প্রভাব নেই (অন্যান্য উত্তর যা বলছে তা সত্ত্বেও)।

বিকল্পভাবে পরিবর্তে এটি করুন:

self.button.contentHorizontalAlignment = UIControlContentHorizontalAlignmentFill;
self.button.contentVerticalAlignment = UIControlContentVerticalAlignmentFill;

অথবা সেই অনুযায়ী আপনার চিত্রের আকার দিন।

অথবা কেবলমাত্র একটি ইউআইআইজেজভিউ (যা কন্টেন্টমোডকে যথাযথভাবে সম্মান করে) ব্যবহার করে এটির সাথে যুক্ত একটি ইউআইটিপজেষ্টাররনগনাইজার বা তার উপরে একটি স্বচ্ছ ইউআইবাটন ব্যবহার করুন।


4
এটি আইওএস my এ আমার ক্ষেত্রে কাজ করে তবে অন্য সমস্ত এখানে নেই।
বাইট করুন

4
বিষয়বস্তু হরিজন্টালাইনালাইনমেন্ট এবং বিষয়বস্তু ভার্টিক্যাল অ্যালাইনমেন্ট সেট করা সঠিক সমাধান। ব্যাখ্যার জন্য stackoverflow.com/a/28205566/481207 দেখুন ।
ম্যাট

4
এই উত্তরটি আমি খুঁজছিলাম।
নিনজিনার

4
এই উত্তরটি ভুল। আপনি কি সেট করতে হবে contentModeউপর imageViewআপনি দৃষ্টিভঙ্গি পূরণ বা হইয়া যে কোন ধরণের কাজ করতে চান, যেমন অন্যান্য উত্তর ব্যাখ্যা করেছেন। তথ্যসূত্র : স্ট্যাকওভারফ্লো . com / a / 7944316 / 746890
ক্রিস নোলেট 18

52

contentModeবোতাম নিজেই সেটিংস স্থাপনের পরিবর্তে , আপনি কোনও বৈশিষ্ট্য পূরণ বা ফিট করার জন্য বোতামটির জন্য contentHorizontalAlignmentএবং contentVerticalAlignmentবৈশিষ্ট্যগুলি (গুরুত্বপূর্ণভাবে) সেট করতে চান । এখানে একটি উদাহরণ:contentModeimageView

button.contentHorizontalAlignment = UIControlContentHorizontalAlignmentFill;
button.contentVerticalAlignment = UIControlContentVerticalAlignmentFill;
button.imageView.contentMode = UIViewContentModeScaleAspectFit;

অবশ্যই, আপনি বোতামের চিত্রটি বোতামের শীর্ষে সারিবদ্ধ করার মতো অন্যান্য জিনিসও করতে পারেন। আপনার যদি কোনও দিক পূরণ বা ফিট করার প্রয়োজন না হয় তবে আপনি কেবল নিজেরাই সাজানো সেট করতে পারেন:

button.contentVerticalAlignment = UIControlContentVerticalAlignmentTop;

সুইফটে, আপনি ব্যবহার করতে চাইবেন:

button.contentHorizontalAlignment = .fill
button.contentVerticalAlignment = .fill
button.imageView?.contentMode = .scaleAspectFit

এটি অটো-লেআউট সহ সর্বশেষতম সংস্করণগুলি সহ আইওএসের সমস্ত সংস্করণের জন্য কাজ করে (যেমন আইওএস 11+ পর্যন্ত আইওএস 4)।


4
ধন্যবাদ ক্রিস - যা আমার সমস্যাটি সমাধান করেছে, বা এটি কন্টেন্টএডজিনসেটসের সাথে একত্রিত হয়ে আমার ইমেজটিকে উপরের প্রান্তটি থেকে কিছুটা পিছনে পিছনে ফেলেছে।
রব রেস

7

কয়েক ঘন্টা বিভ্রান্তির পরে, আমি কীভাবে এটি আইওএস 3.2 এর অধীনে কাজ করতে পারি তা এখানে। দুপুরে যেমন উল্লেখ করা হয়েছে, সেট ইমেজের পরিবর্তে সেটব্যাকগ্রাউন্ড ইমেজ ব্যবহার করা আমার পক্ষে কাজ করেছে।

CGRect myButtonFrame = CGRectMake(0, 0, 250, 250);
UIImage *myButtonImage = [UIImage imageNamed:@"buttonImage"];

UIButton *myButton = [UIButton buttonWithType:UIButtonTypeCustom];

[myButton setBackgroundImage:myButtonImage forState:UIControlStateNormal];
[myButton setFrame: myButtonFrame];
[myButton setContentMode: UIViewContentModeScaleAspectFit];

6

উত্তরটি হ'ল আপনার পছন্দসই সমস্ত মনোরম সামগ্রী মোড সেটিংস সহ একটি ইউআইআইমেজভিউ ব্যবহার করা এবং তারপরে একটি কাস্টম বোতামটি স্তরযুক্ত করা উচিত। বোবা যে আপনি এটি সমস্ত শটেই করতে পারবেন না, তবে এটি প্রদর্শিত হবে appears


4

এটির জন্য একটি সমাধান পাওয়া গেছে। সেট adjustsImageWhenHighlightedসম্পত্তির UIButtonকরতে NO

  UIButton *b = [[UIButton alloc] initWithFrame:rect];
        [b setImage:image forState:UIControlStateNormal];
        [b.imageView setContentMode:UIViewContentModeScaleAspectFill];
        [b setAdjustsImageWhenHighlighted:NO];

আশাকরি এটা সাহায্য করবে. নীচে মন্তব্য নির্দ্বিধায়, আমি আপনার যে কোন প্রশ্ন অনুসরণ করব।


এই নিখুঁত সমাধান।
গৌরব

কাজ করে না। এটি কেবল বোতামটি হাইলাইট করতে বাধা দেয়।
ম্যাট

4

আমার উত্তরটি কুবার মতোই। আমার চিত্রটি প্রোগ্রামক্রমে সেট করা দরকার।

UIImage *image = [[UIImage alloc] initWithContentsOfFile:...];
[button setBackgroundImage:image forState:UIControlStateNormal];
button.imageView.contentMode = UIViewContentModeScaleAspectFill; //this is needed for some reason, won't work without it.
for(UIView *view in button.subviews) {
    view.contentMode = UIViewContentModeScaleAspectFill;
}

3

শুধুমাত্র সমাধান যা আমার পক্ষে কাজ করেছে:

[button setImage:image forState:UIControlStateNormal];
button.imageView.contentMode = UIViewContentModeScaleAspectFill;
button.contentHorizontalAlignment = UIControlContentHorizontalAlignmentFill;
button.contentVerticalAlignment = UIControlContentVerticalAlignmentFill;


1

সেট ইমেজের পরিবর্তে সেটব্যাকগ্রাউন্ড ইমেজ চেষ্টা করুন


4
এইচপি। এ, এটি বোবা, এটি এর বিষয়বস্তুর জন্য কনটেন্ট মোড সেটিংসকে সম্মান করা উচিত, তাই না? এবং বি, এটি এখনও মোডের সেটিংটিকে সম্মান করে বলে মনে হচ্ছে না - এটি এখন "প্রসারিত" (যা এই ক্ষেত্রে, আরও বেশি "চেপে ধরার মতো") তে লক হয়ে গেছে এবং বিষয়টির দিকটি বিবেচনা করে এটি স্কেল করে না অনুপাত.
ড্যান রে

1

আমি বিশ্বাস করি আমাদের এখানে একটি সাধারণ ইন্টারফেস বিল্ডার সমস্যা রয়েছে - আপনি চিত্র-সম্পত্তি নির্ধারণের পরে আইবি কোনও সামগ্রী-মোডের পরিবর্তনগুলি উপেক্ষা করে।

সমাধানটি তত সহজ: কনটেন্ট মোডটি সেট করুন, পূর্বে সেট করা ইমেজ-নামগুলি মুছে ফেলুন (নিশ্চিত করুন আপনি এটি সমস্ত রাজ্যে মুছে ফেলেছেন, ডিফল্ট, হাইলাইটেড ইত্যাদি), তারপরে সমস্ত কাঙ্ক্ষিত রাজ্যে পছন্দসই চিত্র-নামগুলি পুনরায় প্রবেশ করুন - এবং voilà ।


4
প্রোগ্রামিয়ালিটি কনটেন্ট-মোডে সেট করুন - কনটেন্ট-মোড সেট করার আগে ছবিটি সেট করবেন না
জনপায়েন

0

আমি adjustsImageWhenHighlighted UIButtonবোতামটি টিপে গেলে চিত্রটির অদ্ভুত বিকৃতি এড়ানোর জন্য সম্পত্তিটি একবার দেখার পরামর্শ দিই ।


0

এটি অনুধাবন করার চেষ্টা করার সময়, সময় হিসাবে আমার পদ্ধতিটি কিছুটা হ্যাকিয়ার হয়ে উঠল, এবং আমি ইউআইবাটন সাবক্লাসিং এবং অরাইডারিং সেটটি হাইলাইটেড করে ফেললাম:

আমার জন্য এটি চিত্রটি আলফাটি কেবল .5 তে নক করার জন্য কাজ করে, কারণ তারা একটি কালো পটভূমিতে।

তবে, আমি কেবলমাত্র [সুপার সেটহাইলাইটেড:] মন্তব্য দিলে এটি কার্যকর হয় (যেখানে এটি প্রদর্শিত হয় চিত্র-প্রসারিত কোড চলছে), যা এটিকে সমাধান করার সঠিক উপায় বলে মনে হয় না ... সবকিছু মনে হয় ভাল কাজ, যদিও। আমি এটির কাজ চালিয়ে যাব তা আমরা কীভাবে ধরে রেখেছি তা দেখতে পাব।

- (void)setHighlighted:(BOOL)highlight {
    if (highlight) {
        [self.imageView setAlpha:.5];
    }  else {
        [self.imageView setAlpha:1];        
    }

//    [super setHighlighted:highlight];
}

4
সুযোগটিতে যে কোনও এটি প্রাসঙ্গিক মনে করে, আমার উপরের পদ্ধতিটি ইউআইএসক্রোলভিউতে বোতামগুলি না লাগানো পর্যন্ত ঠিক আছে বলে মনে হয়েছিল, যেখানে কখনও কখনও বোতামটির হাইলাইটটি "আটকে যায়" যা আমার সন্দেহ হয়েছিল যা শেষ পর্যন্ত ঘটতে পারে।
জাঙ্কিনস

0

যদি কেউ উত্তরটির সন্ধান করে তবে আইওএস 6 এবং আইওএস 7 এবং স্টোরিবোর্ডে:

আপনি আপনার স্টোরিবোর্ডে চিত্র সেট করতে পারেন:

এখানে চিত্র বর্ণনা লিখুন

এবং তারপর:

for(UIView* testId in self.subviews) {
    if([testId isKindOfClass:[UIImageView class]])
        [testId setContentMode:UIViewContentModeScaleAspectFill];
}

0

যদি ইউআইবাটন লেআউট সীমাবদ্ধতার সেটিংস শুনতে না মনে করে তবে চিত্রগুলি বোতামের আকারের চেয়ে বড় কিনা তা পরীক্ষা করে দেখুন। রেটিনা রেজোলিউশনের জন্য সর্বদা @ 2x এবং @ 3x চিত্র ব্যবহার করুন।


0

এই দুটি জিনিস (যা প্রাথমিকভাবে সন্ধান করা বেশ শক্ত) বোতামের আকারের সাথে ফিট করার জন্য আপনার ইউআইবাটন চিত্রটি প্রসারিত করবে:

এখানে চিত্র বর্ণনা লিখুন এখানে চিত্র বর্ণনা লিখুন

কোডের চেয়ে স্টোরিবোর্ডে সর্বদা এটিকে সেট করার চেষ্টা করা উচিত।

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