স্টোরবোর্ড প্রোটোটাইপ সেল (ইউএসসিএলভিউ, এসইউকে 8 এসডিকে) ইউআইকোলিকেশনভিউসেল সামগ্রীরভিউয়ের ফ্রেমের ইস্যুটি স্বয়ংক্রিয়করণ কেবল তখনই ঘটে যখন আইওএস 7 চালানো হয়


158

আমি এক্সকোড 6 বিটা 3, আইওএস 8 এসডিকে ব্যবহার করছি। সুইফট ব্যবহার করে আইওএস 7.0 টার্গেট তৈরি করুন। নীচের স্ক্রিনশট সহ ধাপে ধাপে আমার সমস্যাটি উল্লেখ করুন।

স্টোরিবোর্ডে আমার একটি ইউআইসিএল্লেশনভিউ আছে। 1 প্রোটোটাইপ ইউআইকোলিকেশনভিউসেল যা কেন্দ্রে 1 টি লেবেল রয়েছে (কোনও স্বয়ংক্রিয়করণের নিয়ম নেই)। বেগুনি পটভূমিটি এমন একটি সামগ্রী ভিউ চিহ্নিত করা ছিল যা সেলটি অনুমান করে যেটি রানটাইমে তৈরি হয়েছিল। এই দৃশ্যের যথাযথ আকারটি আমার ইউআইকোলিকেশনভিউলয়েআউটডেলিগেটের ভিত্তিতে যথাযথ আকারে পরিবর্তন করা হবে তবে শেষ পর্যন্ত আইওএস-এ নয় Notice লক্ষ্য করুন যে আমি এক্সকোড 6 ব্যবহার করছি এবং সমস্যাটি কেবল আইওএস 7 এ ঘটে।

আমি যখন আইওএস 8 এ অ্যাপটি তৈরি করি তখন সবকিছু ঠিক আছে।

দ্রষ্টব্য: বেগুনি বিষয়বস্তু দেখুন , নীল গোলাকার কোণার সাথে আমার UIButton B

http://i.stack.imgur.com/uDNDY.png

যাইহোক, আইওএস on-তে, সেলটির অভ্যন্তরে সমস্ত সাবভিউ হঠাৎ (0,0,50,50) এর ফ্রেমে সঙ্কুচিত হয়ে যায় এবং আর কখনও আমার অটোরেজিং নিয়মের সাথে মানায় না।

http://i.stack.imgur.com/lOZH9.png

আমি ধরে নিই এটি আইওএস 8 এসডিকে বা সুইফট বা সম্ভবত এক্সকোডের একটি বাগ?


আপডেট 1: সরকারী এক্সকোড 6.0.1 এ এখনও এই সমস্যাটি বিদ্যমান! চারপাশের সেরা কাজটি কোষের সেলফোর্ডে আইটেমটিতে ফ্রেম সেট করে নীচে কোসিমোএইচটিএ পরামর্শ দিয়েছে (আপনাকে যদিও আপনার ঘরটি সাবক্লাস করতে হবে) like দেখা গেল যে এটি আইওএস 8 এসডিকে এবং আইওএস 7 (অ্যাপল থেকে উদ্ধৃত ইকোট্যাক্সের উত্তরটি নীচে দেখুন) এর মধ্যে একটি বেমানান।

আপডেট 2: আপনার সেল ফোর আইটেমের শুরুতে এই কোডটি আটকান এবং জিনিসগুলি ঠিক হওয়া উচিত:

/** Xcode 6 on iOS 7 hot fix **/
cell.contentView.frame = cell.bounds;
cell.contentView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
/** End of Xcode 6 on iOS 7 hot fix **/

1
আমি খুঁজে পেয়েছি যে এই সমস্যাটি এখনও এক্সকোড 6 বিটাতে বিদ্যমান রয়েছে Anyone. কেউ কি এটির অভিজ্ঞতাও পেয়েছে?
13:53

2
আমি এখনই আমার প্রকল্পে এটি নিয়ে লড়াই করছি। আইওএস 7 এবং আইওএস 8 এক্সকোড 5 ব্যবহার করে নির্মিত সুন্দর দেখায়। আইওএস 8 এক্সকোড 6 বিটা 6 ব্যবহার করে নির্মিত হয়েছে দেখতে দুর্দান্ত। আইওএস 7 এক্সকোড 6 বিটা 6 ব্যবহার করে তৈরি করা হয়েছে যা আপনি বর্ণনা করছেন তাতে সমস্যা হচ্ছে। উদ্ঘাটন ব্যবহার করে আমি দেখতে পাচ্ছি যে আমার ইউআইকোলিকেশনভিউসেল সঠিকভাবে আকারযুক্ত হয়েছে। তবে কক্ষের সামগ্রীর ভিউটিকে পুনরায় আকার দেওয়া হয়নি, যদিও এটি পিতামাতা, ইউআইকোলিকেশনভিউসেল অটোরাইজ সাবভিউ চালু করেছে। কন্টেন্টভিউয়ের আকার স্টোরিবোর্ডে যা আছে সেট করে। আমি এই প্রকল্পে অটোলেআউট ব্যবহার করছি না। আমার প্রকল্প সম্পূর্ণ উদ্দেশ্য-গ।
ডেল ব্রাউন

2
আমি কেবল যুক্ত করতে চেয়েছিলাম যে এই সমস্যাটি এখনও Xcode 6 / iOS 8 GM বীজ হিসাবে বিদ্যমান। @ ড্যানিয়েলপ্ল্যামনের উত্তরটি কোষটির contentViewসাথে পুনরায় আকার দিতে বাধ্য করা সমস্যার সমাধানের জন্য সূক্ষ্ম কাজ করে। আমি অনুমান করি যে আইওএস 8 এ অ্যাপল ইন্টারফেস বিল্ডারে তৈরি হওয়ার পরে সেল সামগ্রী সামগ্রী দেখানোর পদ্ধতি সম্পর্কে কিছু পরিবর্তন করেছিল (এটি এখনও ব্ল্যাক বক্সের কিছুটা হলেও এখনও)। আইওএস 7 কে টার্গেট করার সময় এটি আচরণে পরিবর্তন আনার বিষয়টি অবশ্যই একটি বাগ।
স্টুয়ার্ট

এখানে এক্সকোড 6 জিএম, অটো লেআউট এবং একটি নিব-ভিত্তিক সেল রয়েছে। আমি contentViewঘরের প্রান্তে প্রান্তগুলি পিন করে এটি ঠিক করেছি ।
sergiou87

3
আমি এক্সকোড 6.1 ডাউনলোড করেছি তবে এখনও সিমুলেটারে একই সমস্যা দেখতে পাচ্ছি।
হাইটাও লি

উত্তর:


169

কন্টেন্টভিউ ভাঙা। এটি জাগ্রত থেকে নেওয়া উচিত can

ObjC:

- (void)awakeFromNib {

    [super awakeFromNib];

    self.contentView.frame = self.bounds;
    self.contentView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
}

Swift3:

override func awakeFromNib() {
    super.awakeFromNib()

    self.contentView.frame = self.bounds
    self.contentView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
}

3
কৌতুকটি স্বতঃসিদ্ধকরণ ছাড়াই করেছে ভাবি আমার দরকার? যাই হোক ধন্যবাদ!
মিশাল শটজ

হ্যালো মিশাল, আপনার সাথে একমত তবে 100% নিশ্চিত হওয়ার জন্য, এটি পরবর্তী আইওএসে এটি কীভাবে আরও ভালভাবে কাজ করবে তা আমি মনে করি add
ইগোর পালাগুটা

5
আমি এই উত্তরটি পছন্দ করি তবে আপনাকে [সুপার জাগ্রত থেকে "কল করা প্রয়োজন] এছাড়াও, আমি আইওএস .1.১ এবং তার চেয়ে কমের জন্য একটি চেক যুক্ত করার কথা ভাবছি, কারণ আমি নিশ্চিত নই যে এই আকার পরিবর্তনকারী মুখোশগুলি কীভাবে আইওএস 8 এর উপর ডিফল্ট আচরণকে প্রভাবিত করে।
জিঞ্জারব্রেডমেন

আপনি যদি নিবস বা স্টোরিবোর্ড ব্যবহার না করে থাকেন তবে এটি প্রয়োগ করুন লেআউটঅ্যাট্রিবিউটস:
সিটসেট

এটি আমার পক্ষে কাজ করে না। আমি অটোলেআউট ব্যবহার করছি না !! কোন সহায়তা?
thatzprem

61

আমি একই সমস্যার মুখোমুখি হয়েছি এবং অ্যাপল ডিটিএসের কাছে সাহায্য চেয়েছি। তাদের উত্তর ছিল:

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

আইওএস to-এ ফিরে আসা অ্যাপ্লিকেশনগুলিকে বিষয়বস্তু ভিউ নিজেই আকার মেশানো, অটোরেসাইজিং মাস্কগুলি যোগ করে বা সীমাবদ্ধতা যুক্ত করে এগুলি নিয়ে কাজ করতে হবে।

আমি অনুমান করি এর অর্থ এই যে এটি এক্সকোড 6 এ কোনও বাগ নয়, তবে আইওএস 8 এসডিকে এবং আইওএস 7 এসডিকে-র মধ্যে একটি বেমানানতা রয়েছে যা আপনি এক্সকোড 6 এ আপগ্রেড করলে আপনাকে আঘাত করবে কারণ এটি স্বয়ংক্রিয়ভাবে আইওএস 8 এসডিকে ব্যবহার শুরু করবে।

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


এটি আকর্ষণীয়, তবে আমি এখনও আশা করি তারা এটি ঠিক করেছেন। এই আচরণটি কেবলমাত্র Xcode 6 GM তে প্রবর্তিত হয়েছিল যা আইফোন 6 সমর্থন যুক্ত করেছিল। এটি আগের বেটাসে ঠিকঠাক কাজ করছিল। এমনকি আমি এটির নজরে আসার পরেও একটি প্রকল্পটিকে পূর্বের বিটাতে ফিরিয়ে আনলাম এবং এটি প্রত্যাশা অনুযায়ী কাজ করেছিল। আমি আশা করি সকলেই এই বিষয়টি নিয়ে অ্যাপলের সাথে বাগ ফাইল করবেন files
আর্টন

@ আর্টন আমি সেদিনই একটি বাগ রিপোর্ট দায়ের করেছি আমি ডিটিএসের কাছে সাহায্য চেয়েছিলাম। এটি 18312246 এর সদৃশ হিসাবে বন্ধ ছিল this এটি কতটা সহায়তা করে তা নিশ্চিত নয়।
ইকোট্যাক্স

আমি কন্টেন্টভিউ আকারের মাধ্যমে চারপাশের কাজটি ব্যবহার করেছি এবং আমার পক্ষে কাজ করে। - (সিজি সাইজ) সংগ্রহভিউ কনটেন্টসাইজ C সিজি সাইজমেককে ফিরিয়ে দিন (স্বতঃপরিবর্তনভিউ.বাউন্ডস.উইডথ, সেলফ-কালেকশনভিউ.বাউন্ডস.ইহাইট); }
জেসেস হুর্তাদো

60

আমি একই সমস্যার মুখোমুখি হয়েছি এবং আশা করছি যে অ্যাপল এটি পরবর্তী এক্সকোড সংস্করণ দিয়ে ঠিক করবে। ইতিমধ্যে আমি একটি workaround ব্যবহার। আমার UICollectionViewCellসাবক্লাসে আমি মাত্র ওভাররাইড করেছি layoutSubviewsএবং আকারটি আকারের থেকে পৃথক হয়ে গেলে ম্যানুয়ালি কনটেন্ট ভিউটিকে আকার পরিবর্তন করেছি collectionViewCell

- (void)layoutSubviews
{
  [super layoutSubviews];

  BOOL contentViewIsAutoresized = CGSizeEqualToSize(self.frame.size, self.contentView.frame.size);

  if( !contentViewIsAutoresized) {
    CGRect contentViewFrame = self.contentView.frame;
    contentViewFrame.size = self.frame.size;
    self.contentView.frame = contentViewFrame;
  }
}

হ্যাঁ, আমি প্রায় একই ধরণের কাজটি ব্যবহার করেছি তবে আমি এটি সেলফর্ম আইটেম / সেলফোর্ডে করেছিলাম যা কাজ করে।
থিঙ্ক

1
এটিই সেরা সমাধান। সেলফোর আইটেম / সেলফোর্ডে এটিকে যুক্ত করার ফলে আপনি যদি ডিভাইসটি ঘোরান এবং ঘরের আকারের পরিবর্তন হয় তবে অদ্ভুত শিল্পকর্মগুলির কারণ হবে।
স্পাইবার্ট

ওহে! এই কোডটি নিয়ে আমার সমস্যা হয়েছে। প্রথমবারের মতো, বুলিয়ান কনটেন্ট ভিউআইএসআউটরেটেজড সত্য হবে যদি এটি স্টোরিবোর্ড বা প্রোটোটাইপ সেল থেকে লোড করা হয়। আপনি যখন কোনও পুনরায়লোড ডেটা করেন কেবল তখনই দ্বিতীয়টি সঠিক হবে। সুতরাং আপনার আকারটি পরীক্ষা করার দরকার নেই। পরিবর্তে কেবল করুন: self.contentView.frame = স্ব.বাউন্ডস;
thkeen

নিশ্চিত করা হয়েছে: আমাদের সেলফর্ম আইটেম বা সেলফোরউতে এটি করা উচিত কারণ সারণি ফিরে আসার পরে কেবল লেআউটসুভিউগুলি বলা হয়। এর আগে আপনি যা কিছু করেন তা আঁকার স্টাফকে ভুলভাবে গণনা করা হবে।
থিঙ্কেন

1
এইচএম, সম্ভবত এটি [cell layoutIfNeeded];সেলফর্ম আইটেম বা সেলফোর্ডে রাখাই ভাল?
ওটারসী

38

আর একটি সমাধান হ'ল কন্টেন্টভিউ'র আকার এবং অটোরেসাইজিং মাস্কগুলি -collectionView:cellForItemAtIndexPath:নীচের মত সেট করুন :

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {

     static NSString *cellID = @"CellID";

     UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:cellID forIndexPath:indexPath];

     // Set contentView's frame and autoresizingMask
     cell.contentView.frame = cell.bounds;
     cell.contentView.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleRightMargin |UIViewAutoresizingFlexibleTopMargin |UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleBottomMargin;

     // Your custom code goes here

     return cell;
}

এটি স্বয়ংক্রিয় বিন্যাসের সাথেও কাজ করে, যেহেতু স্বয়ংক্রিয় আকার পরিবর্তনকারী মুখোশগুলি সীমাবদ্ধতায় অনুবাদ করা হয়।


2
এটি একটি সর্বোত্তম সমাধান কারণ এটি সাবক্লাসিং ছাড়াই যে কোনও ঘর ধরণের সাথে কাজ করে এবং যখন আপনি আপনার সংগ্রহের দর্শনে একাধিক ধরণের ঘর ব্যবহার করছেন তখন একাধিক জায়গায় পরিবর্তনের প্রয়োজন হয় না।
nacross

6

এক্সকোডে 6.0.1 বিষয়বস্তুতে ইউআইকোলিকেশনভিউসেল জন্য আইওএস 7 ডিভাইসগুলির জন্য ভাঙা হয়েছে। এটি জাগ্রতফ্র্যামনিব বা আরআইডি পদ্ধতিতে ইউআইকোলিকেশনভিউসেল এবং এর বিষয়বস্তুগুলিতে যথাযথ বাধা যুক্ত করেও ঠিক করা যেতে পারে।

        UIView *cellContentView = self.contentView;
        cellContentView.translatesAutoresizingMaskIntoConstraints = NO;

        [self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[cellContentView]|"
                                                                     options:0
                                                                     metrics:0
                                                                       views:NSDictionaryOfVariableBindings(cellContentView)]];
        [self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[cellContentView]|"
                                                                     options:0
                                                                     metrics:0
                                                                       views:NSDictionaryOfVariableBindings(cellContentView)]];

কেবল এটি এখনই কাজ করে, আপনাকে কেবল আইওএস 8 এর জন্য এটি করতে হবে, এবং আমাকে প্রতিটি প্রাত্যহিকের পরে এটি কল করতে হবে! তবে এটিও আদর্শ সমাধান নয় কারণ একাধিক নির্বাচন দৃশ্যমানভাবে যেমন কাজ করে তেমন কাজ করে না ...
রেনেটিক

সত্যই অটোলেআউট ব্যবহার করা সবচেয়ে ভাল, এই বাগের সাহায্যে আপনি সাধারণ ক্ষেত্রে
অটোলেআউট

মুখোশটি আমার পক্ষে কাজ করে না; তবে বাধা নির্ধারণ কাজ করে!
এনট্রপিড

4

এক্সকোড GM জিএম-তে একটি বাগের সাহায্যে এক্সকোড কীভাবে এক্সআইবি ফাইলগুলিকে নিব ফর্ম্যাটে সংকলন করে তা অন্য উল্লিখিত ওয়ার্কআরউন্ডগুলি ছাড়া এটি সঠিকভাবে কাজ করবে না। যদিও আমি 100% নিশ্চিততার জন্য এটি বলতে পারি না এটি Xcode সম্পর্কিত এবং রানটাইমের সাথে না করা, আমি খুব আত্মবিশ্বাসী - আমি কীভাবে এটি প্রদর্শন করতে পারি তা এখানে:

  1. এক্সকোড 5.1 এ অ্যাপ্লিকেশনটি বিল্ড করুন।
  2. সিমুলেটর অ্যাপ্লিকেশন ডিরেক্টরিতে যান এবং যে সমস্যা নিয়ে আপনি সমস্যায় পড়েছেন তার জন্য সংকলিত .nib ফাইলটি অনুলিপি করুন।
  3. এক্সকোড 6 জিএম এ বিল্ড + অ্যাপ্লিকেশন চালান।
  4. অ্যাপ্লিকেশন বন্ধ করুন।
  5. নতুন নির্মিত অ্যাপ্লিকেশনটির সিমুলেটর ফোল্ডারে .nib ফাইলকে Xcode 5.1 ব্যবহার করে তৈরি করা .nib ফাইলের সাথে প্রতিস্থাপন করুন
  6. এক্সকোড থেকে নয়, সিমুলেটর থেকে অ্যাপটি পুনরায় চালু করুন।
  7. .Nib থেকে লোড হওয়া আপনার ঘরটি প্রত্যাশার মতো কাজ করা উচিত।

আমি আশা করি যারা এই প্রশ্নটি পড়বেন তারা অ্যাপলের সাথে একটি রাডার দায়ের করবেন। এটি একটি বিশাল সমস্যা এবং চূড়ান্ত এক্সকোড প্রকাশের আগে সম্বোধন করা দরকার।

সম্পাদনা: ইকোটাক্সের পোস্টের আলোকে , আমি কেবল এটি আপডেট করতে চেয়েছিলাম এটি এখন iOS 8 বনাম আইওএস 7 এর মধ্যে বিল্ডিংয়ের মধ্যে আচরণের পার্থক্য নিশ্চিত হয়েছে, তবে কোনও বাগ নেই। আমার হ্যাকটি সমস্যার সমাধান করেছে কারণ আইওএস 7 এ বিল্ডিংয়ের ফলে এই কাজটি করতে প্রয়োজনীয় সামগ্রীর দৃশ্যে অটোরিসাইজিং মাস্ক যুক্ত হয়েছে, যা অ্যাপল আর যোগ করে না।


আমি নিশ্চিত নই যে তারা আইনত জিএম সংস্করণের চেয়ে আলাদা এক্সকোড প্রকাশ করতে পারে
মাবেদন

ওরা কারাগারে যাবে? = পি তবে সমস্ত গাম্ভীর্যে তারা অবশ্যই পারবে। আপনি যদি মনে না রাখেন তবে তাদের কাছে মাভারিক্সের জন্য একাধিক জিএম সংস্করণ ছিল। এটি খুব সাধারণ নয় তবে এটি ঘটতে পারে।
এসি

4

এই পোস্টে উত্তরগুলি, যা আমি কখনই বুঝতে পারি নি সে কারণেই এটি কাজ করে।

প্রথমত, এখানে দুটি "বিধি" রয়েছে:

  1. প্রোগ্রামগতভাবে তৈরি দর্শনগুলির জন্য (প্র। [UIView new]), সম্পত্তি translatesAutoresizingMaskIntoConstraintsসেট করা আছেYES
  2. স্বতঃআলিআউট সক্ষম করা সহ ইন্টারফেস বিল্ডারে নির্মিত ভিউগুলিতে সম্পত্তি translatesAutoresizingMaskIntoConstraintsসেট করা থাকবেNO

দ্বিতীয় নিয়মটি শীর্ষ-স্তরের মতামতের জন্য প্রযোজ্য বলে মনে হচ্ছে না যার জন্য আপনি সীমাবদ্ধতাগুলি সংজ্ঞায়িত করেন না। (উদাঃ সামগ্রী দেখুন)

স্টোরিবোর্ড ঘরের দিকে তাকানোর সময় লক্ষ্য করুন যে কক্ষটি তার contentViewপ্রকাশিত হয়নি। contentViewঅ্যাপল হ'ল আমরা "নিয়ন্ত্রণ" করছি না ।

স্টোরিবোর্ড উত্স কোডে গভীর ডুব দিন এবং দেখুন কীভাবে contentViewঘর সংজ্ঞায়িত করা হয়েছে:

<view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">

এখন ঘরের সাবভিউ (লক্ষ্য করুন translatesAutoresizingMaskIntoConstraints="NO"):

<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="NaT-qJ-npL" userLabel="myCustomLabel">

contentViewএটা হচ্ছে নেই translatesAutoresizingMaskIntoConstraintsসেট NO। প্লাস এতে লেআউট সংজ্ঞা নেই, কারণ @ ইকোট্যাক্স যা বলেছিল তার কারণেই হতে পারে ।

আমরা যদি contentViewএটি খতিয়ে দেখি তবে এতে একটি অটোরিসাইজিং মাস্ক রয়েছে তবে এর কোনও সংজ্ঞা নেই: <autoresizingMask key="autoresizingMask"/>

সুতরাং দুটি সিদ্ধান্ত আছে:

  1. contentView translatesAutoresizingMaskIntoConstraintsসেট করা আছে YES
  2. contentView একটি বিন্যাসের সংজ্ঞা নেই।

এটি আমাদের দুটি সমাধান নিয়ে যায় যা নিয়ে কথা বলা হয়েছে।

আপনি স্বয়ংক্রিয়ভাবে মুখোশগুলি ম্যানুয়ালি সেট করতে পারেন awakeFromNib:

self.contentView.frame = cell.bounds;
self.contentView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

অথবা আপনি সেট করতে পারেন contentView translatesAutoresizingMaskIntoConstraintsকরার NOমধ্যে awakeFromNibএবং সীমাবদ্ধতার সংজ্ঞায়িত - (void)updateConstraints


4

এটি @ ইগর এর উত্তরের সুইফট সংস্করণ যা গ্রহণযোগ্য এবং আপনার উত্তরের উত্তর সাথীর জন্য ধন্যবাদ।

প্রথম এতে যান আপনার UICollectionViewCellউপশ্রেণী এবং নিম্নলিখিত কোড পেস্ট করুন যেমন শ্রেণীর ভিতরের হয়।

override func awakeFromNib() {
    super.awakeFromNib()
    self.contentView.frame = self.bounds
    self.contentView.autoresizingMask = [.FlexibleHeight, .FlexibleWidth]
}

যাইহোক আমি এক্সকোড 7.3.1 এবং সুইফট 2.3 ব্যবহার করছি। আইওএস 9.3 এ সমাধানটি পরীক্ষা করা হয় যা নির্দ্বিধায় কাজ করে।

ধন্যবাদ, আশা করি এটি সাহায্য করেছে।


আমার খারাপ ইংরেজির জন্য দুঃখিত, আমার অর্থ "
মনোমুগ্ধকর

@ আজনিক্স কোনও ইস্যু নেই .. :)
কমপ্লেশন

2

দ্রুত পদক্ষেপে, সংগ্রহ ভিউ সেল সাবক্লাসে নিম্নলিখিত কোডটি রাখুন:

override var bounds: CGRect {
  didSet {
    // Fix autolayout constraints broken in Xcode 6 GM + iOS 7.1
    self.contentView.frame = bounds
  }
}

এই উত্তরটি আমি খুঁজছিলাম। এই সমস্যাটি সমাধান করার জন্য আমি অবজেক্টিভ-সি-তে সেটবাউন্ডারগুলিকে ওভাররাইড করতাম (সুইফটে কীভাবে এটি লিখবেন তা নিশ্চিত ছিলেন না)। আপনাকে ধন্যবাদ :)
ম্যাথু কওলি

1

আমি দেখতে পেয়েছি যে contentViewআইওএস 8 এর আকার দেওয়ার ক্ষেত্রেও সমস্যা রয়েছে 8 এটি চক্রের মধ্যে খুব দেরিতে ছড়িয়ে পড়ে, যা সাময়িক বাধা বিবাদের কারণ হতে পারে। এটি সমাধানের জন্য, আমি একটি বিভাগে নিম্নলিখিত পদ্ধতিটি যুক্ত করেছি UICollectionViewCell:

- (void)fixupContentView
{
#if __IPHONE_OS_VERSION_MAX_ALLOWED < 80100
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000
    if (NSFoundationVersionNumber <= NSFoundationVersionNumber_iOS_7_1) {
        self.contentView.frame = self.bounds;
        self.contentView.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleRightMargin |UIViewAutoresizingFlexibleTopMargin |UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleBottomMargin;
    } else {
        [self layoutIfNeeded];
    }
#endif
#endif
}

এই পদ্ধতিটি সেলটি ছাড়ার পরে কল করা উচিত।


এটি আদর্শ হবে যদি এই পদ্ধতিটি স্বয়ংক্রিয়ভাবে কল করা হয়। আমি এটি পছন্দ করি না, তবে এটি সুইজলিংয়ের মাধ্যমে করা যেতে পারে dequeueReusableCellWithReuseIdentifier:forIndexPath:
ফাতেমন

অ্যাপল XCode 6.1 GM (বিল্ড 6A1042 বি) এর iOS এসডিকে 8.1 সংস্করণে এই সমস্যাটি সমাধান করেছে বলে মনে হচ্ছে। অতএব আমি 8.1 এসডিকে ব্যবহার করার সময় চালনা না করার জন্য উপরের কোডটি আপডেট করেছি। আপনার দলটি সবসময় এক্সকোড 6.1 এ চলে গেলে আপনি এই হ্যাকটিকে পুরোপুরি মুছে ফেলতে পারেন।
ফটম্যান

1

আমি এটি করা স্থির করেছি:

override func layoutSubviews() {
   contentView.superview?.frame = bounds
   super.layoutSubviews()
}

দেখুন: এখানে


-1

কেবলমাত্র নিশ্চিত হয়ে নিন যে আপনি সেই সংগ্রহ ভিউ সেলটির জন্য নিবটিতে "অটোরিসাইজ সাবভিউগুলি" চেক বাক্সটি চেক করেছেন। এটি আইওএস 8 এবং আইওএস 7 উভয় ক্ষেত্রেই দুর্দান্ত কাজ করবে।


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