ปัญหาการเปลี่ยนขนาดเฟรม UICollectionViewCell contentView แบบอัตโนมัติในเซลล์ต้นแบบสตอรีบอร์ด (Xcode 6, iOS 8 SDK) เกิดขึ้นเมื่อทำงานบน iOS 7 เท่านั้น


158

ฉันใช้ Xcode 6 Beta 3, iOS 8 SDK สร้างเป้าหมาย iOS 7.0 โดยใช้ Swift โปรดอ้างอิงปัญหาของฉันทีละขั้นตอนกับภาพหน้าจอด้านล่าง

ฉันมี UICollectionView ใน Storyboard 1 Prototype UICollectionViewCell ซึ่งมี 1 ป้ายกำกับอยู่ตรงกลาง (ไม่มีกฎการเปลี่ยนขนาดอัตโนมัติ) พื้นหลังสีม่วงคือการทำเครื่องหมาย contentView ที่สร้างขึ้นในรันไทม์โดยเซลล์ฉันเดา มุมมองนั้นจะถูกปรับขนาดอย่างเหมาะสมตาม UICollectionViewLayoutDelegate ของฉันในที่สุด แต่ไม่ใช่ใน iOS 7 สังเกตว่าฉันใช้ Xcode 6 และปัญหาเกิดขึ้นกับ iOS 7 เท่านั้น

เมื่อฉันสร้างแอพใน iOS 8 ทุกอย่างโอเค

หมายเหตุ: สีม่วงคือcontentView , Blue คือ UIButton ของฉันที่มีมุมมน

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

อย่างไรก็ตามใน iOS 7 การดูย่อยทั้งหมดภายในเซลล์จู่ ๆ เฟรมของ (0,0,50,50) และไม่สอดคล้องกับกฎ Autoresizing ของฉันอีกต่อไป

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

ฉันคิดว่านี่เป็นข้อผิดพลาดใน iOS 8 SDK หรือ Swift หรือ Xcode


อัปเดต 1:ปัญหานี้ยังคงมีอยู่ใน Xcode 6.0.1 อย่างเป็นทางการ! การทำงานที่ดีที่สุดคือสิ่งที่ KoCMoHaBTa แนะนำไว้ด้านล่างโดยตั้งค่าเฟรมใน cellForItem ของเซลล์ (คุณต้องซับคลาสเซลล์ของคุณด้วย) มันกลับกลายเป็นว่านี่เป็นความไม่ลงรอยกันระหว่าง iOS 8 SDK และ iOS 7 (ตรวจสอบคำตอบของ ecotax ด้านล่างที่ยกมาจาก Apple)

อัปเดต 2: วางรหัสนี้ไว้ที่จุดเริ่มต้นของcellForItemของคุณและสิ่งต่าง ๆ ควรจะโอเค:

/** 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
ฉันพบว่าปัญหานี้ยังคงมีอยู่ใน Xcode 6 Beta 5 ทุกคนประสบปัญหานี้ด้วยหรือไม่
thkeen

2
ฉันกำลังดิ้นรนกับสิ่งนี้ในโครงการของฉัน iOS 7 และ iOS 8 สร้างขึ้นโดยใช้ Xcode 5 ดูดี iOS 8 ที่สร้างขึ้นโดยใช้ Xcode 6 beta 6 ดูดี iOS 7 ที่สร้างขึ้นโดยใช้ Xcode 6 เบต้า 6 กำลังประสบปัญหาที่คุณกำลังอธิบาย การใช้การเปิดเผยฉันเห็นว่า UICollectionViewCell ของฉันมีขนาดที่เหมาะสม แต่ contentView ของเซลล์ไม่ได้ถูกปรับขนาดแม้ว่าจะเป็น parent แต่ UICollectionViewCell เปิด Autoresize Subviews ไว้ ขนาดของ contentView ถูกตั้งค่าเป็นสิ่งที่กระดานเรื่องราวมี ฉันไม่ได้ใช้การชำระอัตโนมัติในโครงการนี้ โครงการของฉันมีวัตถุประสงค์อย่างสมบูรณ์
Del Brown

2
ฉันแค่อยากจะเพิ่มว่าปัญหานี้ยังคงมีอยู่ในเมล็ดพันธุ์ Xcode 6 / iOS 8 GM @ คำตอบของ DanielPlamann เพื่อบังคับcontentViewให้ปรับขนาดด้วยเซลล์ทำงานได้ดีเพื่อแก้ไขปัญหา ฉันเดาว่าใน iOS 8 Apple ได้เปลี่ยนแปลงบางอย่างเกี่ยวกับวิธีจัดการเนื้อหามุมมองของเซลล์เมื่อสร้างใน Interface Builder (ซึ่งยังคงเป็นกล่องดำอยู่เล็กน้อย) แต่ความจริงที่ว่ามันเปลี่ยนพฤติกรรมเมื่อกำหนดเป้าหมาย iOS 7 ย่อมเป็นข้อบกพร่อง
จวร์ต

เช่นเดียวกันกับ Xcode 6 GM, เลย์เอาต์อัตโนมัติและเซลล์ที่ใช้ปลายปากกา ฉันแก้ไขมันโดยปักหมุดที่contentViewขอบกับขอบเซลล์
sergiou87

3
ฉันดาวน์โหลด xcode 6.1 แต่ยังคงพบปัญหาเดียวกันในเครื่องจำลอง
Haitao Li

คำตอบ:


169

contentView หัก มันสามารถแก้ไขได้ใน awakeFromNib

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
หลอกลวงได้โดยไม่ต้อง self.contentView.frame = self.bounds; คิดว่าฉันต้องการมัน? ขอขอบคุณ!
Michal Shatz

สวัสดีมิคาลเห็นด้วยกับคุณ แต่เพื่อให้แน่ใจ 100% จะทำงานได้อย่างไรใน iOS ถัดไปที่ดีกว่าที่ฉันจะเพิ่ม
Igor Palaguta

5
ฉันชอบคำตอบนี้ แต่คุณต้องเรียก [super awakeFromNib]; นอกจากนี้ฉันกำลังคิดเกี่ยวกับการเพิ่มการตรวจสอบสำหรับ iOS 7.1 และต่ำกว่าเพราะฉันไม่แน่ใจว่าการเพิ่มมาสก์การปรับขนาดเหล่านี้มีผลต่อพฤติกรรมเริ่มต้นบน iOS8 อย่างไร
GingerBreadMane

หากคุณไม่ได้ใช้ไส้ปากกาหรือกระดานเรื่องราวสิ่งนี้จะใช้งานได้ถ้าคุณใส่ไว้ใน ApplyLayoutAttributes:
cetcet

มันไม่ได้ผลสำหรับฉัน ฉันไม่ได้ใช้ Autolayout !! ความช่วยเหลือใด ๆ
thatzprem

61

ฉันพบปัญหาเดียวกันและขอความช่วยเหลือจาก Apple DTS คำตอบของพวกเขาคือ:

ใน iOS 7 มุมมองเนื้อหาของเซลล์จะปรับขนาดเองผ่านหน้ากากอัตโนมัติ ใน iOS 8 สิ่งนี้มีการเปลี่ยนแปลงเซลล์หยุดใช้มาสก์การเปลี่ยนขนาดอัตโนมัติและเริ่มปรับขนาดมุมมองเนื้อหาในเค้าโครงตัวอย่าง หากไส้ปากกาถูกเข้ารหัสใน iOS 8 แล้วถอดรหัสบน iOS 7 คุณจะมีมุมมองเนื้อหาโดยไม่มีหน้ากากปรับขนาดอัตโนมัติและไม่มีวิธีการอื่นที่จะปรับขนาด ดังนั้นหากคุณเปลี่ยนเฟรมของเซลล์มุมมองเนื้อหาจะไม่ติดตาม

แอพที่กำลังปรับใช้กลับไปเป็น iOS 7 จะต้องหลีกเลี่ยงปัญหานี้ด้วยการปรับขนาดมุมมองเนื้อหาเองเพิ่มรูปแบบการเติมขนาดอัตโนมัติหรือเพิ่มข้อ จำกัด

ฉันเดาว่านี่หมายความว่าไม่ใช่ข้อผิดพลาดใน XCode 6 แต่ความไม่ลงรอยกันระหว่าง iOS 8 SDK และ iOS 7 SDK ซึ่งจะกระทบคุณหากคุณอัปเกรดเป็น Xcode 6 เพราะจะเริ่มใช้ iOS 8 SDK โดยอัตโนมัติ

ตามที่ฉันแสดงความคิดเห็นก่อนหน้านี้ Daniel Plamann ได้อธิบายวิธีแก้ปัญหาสำหรับฉันแล้ว คนที่อธิบายโดย Igor Palaguta และ KoCMoHaBTa นั้นดูเรียบง่ายกว่าและดูเหมือนสมเหตุสมผลที่จะให้คำตอบกับ Apple DTS ดังนั้นฉันจะลองดูทีหลัง


สิ่งนี้น่าสนใจ แต่ฉันก็ยังหวังว่าพวกเขาจะแก้ไข พฤติกรรมนี้ได้รับการแนะนำใน Xcode 6 GM เท่านั้นซึ่งเพิ่มการรองรับ iPhone 6 มันทำงานได้ดีในช่วงก่อนหน้า ฉันยังนำโครงการกลับไปสู่รุ่นเบต้าก่อนหน้าหลังจากฉันสังเกตเห็นและทำงานได้ตามที่คาดหวัง ฉันหวังว่าทุกคนจะมีปัญหากับ Apple ในเรื่องนี้
arton

@arton ฉันได้ยื่นรายงานข้อผิดพลาดในวันเดียวกับที่ฉันขอความช่วยเหลือจาก DTS มันถูกปิดเป็นสำเนาของ 18312246 ไม่แน่ใจว่ามันช่วยได้มากแค่ไหน
ecotax

ฉันใช้วิธีแก้ปัญหาโดยปรับขนาด ContentView และทำงานให้ฉัน - (CGSize) collectionViewContentSize {return CGSizeMake (self.collectionView.bounds.size.width, self.collectionView.bounds.size.height); }
Jesús Hurtado

60

ฉันพบปัญหาเดียวกันและหวังว่า Apple จะแก้ไขปัญหานี้ด้วย Xcode เวอร์ชันถัดไป ในขณะเดียวกันฉันใช้วิธีแก้ปัญหา ในUICollectionViewCellคลาสย่อยของฉันฉันเพิ่งเขียนทับlayoutSubviewsและปรับขนาด contentView ด้วยตนเองในกรณีที่ขนาดแตกต่างจาก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;
  }
}

ใช่ฉันใช้งานที่คล้ายกัน แต่ฉันทำมันใน cellForItem / cellForRow ซึ่งยังใช้งานได้
thkeen

1
นี่คือทางออกที่ดีที่สุด การเพิ่มสิ่งนี้ใน cellForItem / cellForRow จะทำให้สิ่งประดิษฐ์แปลก ๆ ถ้าคุณกำลังหมุนอุปกรณ์และการเปลี่ยนแปลงขนาดของเซลล์
spybart

Hi! ฉันมีปัญหากับรหัสนี้ เป็นครั้งแรกที่บูลีน contentViewIsAutoresized จะเป็นจริงถ้ามันถูกโหลดจากสตอรีบอร์ดหรือเซลล์ต้นแบบ เฉพาะเมื่อคุณทำการรีโหลดข้อมูลครั้งที่สองมันจะถูกต้อง ดังนั้นคุณไม่จำเป็นต้องตรวจสอบขนาดจริง ๆ เพียงแค่ทำ: self.contentView.frame = self.bounds;
thkeen

ยืนยัน: เราควรทำใน cellForItem หรือ cellForRow เพราะ layoutSubviews จะถูกเรียกหลังจากเซลล์ถูกส่งคืนเท่านั้น สิ่งที่คุณทำก่อนหน้านั้นเช่นการวาดสิ่งต่างๆจะถูกคำนวณอย่างผิด ๆ
thkeen

1
อืมอาจจะดีกว่าถ้าวางไว้[cell layoutIfNeeded];ใน cellForItem หรือ cellForRow
wtorsi

38

อีกวิธีหนึ่งคือการกำหนดขนาดของ contentView และมาสก์ปรับขนาดอัตโนมัติใน-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

ใน Xcode 6.0.1 contentView สำหรับ UICollectionViewCell ใช้งานไม่ได้สำหรับอุปกรณ์ iOS7 สามารถแก้ไขได้โดยเพิ่มข้อ จำกัด ที่เหมาะสมให้กับ UICollectionViewCell และ contentView ใน awakeFromNib หรือวิธีการเริ่มต้น

        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)]];

ตอนนี้ใช้งานได้แล้วคุณต้องทำเพื่อ IOS 8 เท่านั้นและฉันต้องโทรหาหลังจากการถอนออกแต่ละครั้ง! แต่ตอนนี้ยังไม่ได้เป็นทางออกที่ดีเพราะการเลือกหลายจะไม่ได้ทำงานตามที่ควรสายตา ...
Renetik

ที่ดีที่สุดคือการใช้ autolayout จริงๆกับปัญหานี้ให้คุณประหยัดเวลาแดกดันจากเหตุการณ์ใช้ autolayout ในกรณีที่เรียบง่าย ..
Renetik

หน้ากากไม่ทำงานสำหรับฉัน อย่างไรก็ตามการตั้งค่าข้อ จำกัด ใช้งานได้!
เอนโทร

4

สิ่งนี้จะทำงานไม่ถูกต้องหากไม่มีวิธีการแก้ไขอื่น ๆ ที่กล่าวถึงเนื่องจากข้อผิดพลาดใน Xcode 6 GM ด้วยวิธีที่ Xcode รวบรวมไฟล์ xib ในรูปแบบปลายปากกา ในขณะที่ฉันไม่สามารถบอกได้แน่นอน 100% มันเกี่ยวข้องกับ Xcode และไม่เกี่ยวข้องกับ runtime ฉันมั่นใจมาก - นี่คือวิธีที่ฉันจะแสดง:

  1. Build + เรียกใช้แอปพลิเคชันใน Xcode 5.1
  2. ไปที่ไดเรกทอรีของแอปพลิเคชันจำลองและคัดลอกไฟล์. nib ที่คอมไพล์แล้วสำหรับ xib ที่คุณประสบปัญหา
  3. Build + เรียกใช้แอปพลิเคชันใน Xcode 6 GM
  4. หยุดแอปพลิเคชัน
  5. แทนที่ไฟล์. nib ในโฟลเดอร์เครื่องมือจำลองของแอพพลิเคชั่นที่สร้างขึ้นใหม่ด้วยไฟล์. nib ที่สร้างขึ้นโดยใช้ Xcode 5.1
  6. เรียกใช้แอปพลิเคชันอีกครั้งจากตัวจำลองไม่ใช่จาก Xcode
  7. เซลล์ของคุณโหลดจาก. ปลายปากกาควรทำงานตามที่คาดไว้

ฉันหวังว่าทุกคนที่อ่านคำถามนี้จะส่งข้อมูล Radar ด้วย Apple นี่เป็นปัญหาใหญ่และจำเป็นต้องจัดการก่อนที่จะปล่อย Xcode ขั้นสุดท้าย

แก้ไข: เนื่องจากโพสต์ของ ecotaxฉันแค่ต้องการอัปเดตสิ่งนี้เพื่อบอกว่าตอนนี้ได้รับการยืนยันความแตกต่างของพฤติกรรมระหว่างการสร้างใน iOS 8 กับ iOS 7 แต่ไม่ใช่ข้อผิดพลาด แฮ็คของฉันแก้ไขปัญหาได้เนื่องจากการสร้างบน iOS 7 ได้เพิ่มมาสก์การเพิ่มขนาดอัตโนมัติในมุมมองเนื้อหาที่จำเป็นในการทำให้งานนี้ไม่ได้เพิ่มซึ่ง Apple ไม่ได้เพิ่ม


ฉันไม่แน่ใจว่าพวกเขาถูกต้องตามกฎหมายสามารถปล่อย xCode ที่แตกต่างจากรุ่น GM ได้
ไหม

ฮ่าฮ่าพวกเขาจะเข้าคุกเหรอ? = P แต่ในความจริงจังทั้งหมด พวกเขามีเวอร์ชัน GM หลายเวอร์ชันสำหรับ Mavericks ถ้าคุณจำไม่ได้ มันไม่ธรรมดาเกินไป แต่ก็สามารถเกิดขึ้นได้
Acey

4

คำตอบในงานโพสต์นี้สิ่งที่ฉันไม่เคยเข้าใจคือเหตุผลมันทำงาน

ก่อนอื่นมี "กฎ" สองข้อ:

  1. สำหรับมุมมองที่สร้างโดยทางโปรแกรม (ตัวอย่าง[UIView new]) คุณสมบัติtranslatesAutoresizingMaskIntoConstraintsจะถูกตั้งค่าเป็นYES
  2. มุมมองที่สร้างในตัวสร้างส่วนต่อประสานที่เปิดใช้งาน AutoLayout จะมีการtranslatesAutoresizingMaskIntoConstraintsตั้งค่าคุณสมบัติเป็นNO

กฎข้อที่สองดูเหมือนจะไม่ใช้กับมุมมองระดับบนสุดที่คุณไม่ได้กำหนดข้อ จำกัด (เช่นมุมมองเนื้อหา)

เมื่อดูเซลล์สตอรีบอร์ดให้สังเกตว่าเซลล์นั้นไม่ได้contentViewถูกเปิดเผย เราไม่ได้ "ควบคุม"contentView Apple คือ

ดำดิ่งลงในซอร์สโค้ดของสตอรี่บอร์ดและดูว่า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นอกจากนี้ยังไม่มีคำจำกัดความของรูปแบบอาจเป็นเพราะสิ่งที่@ecax พูดกล่าวว่า

ถ้าเรามองเข้าไปใน 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

นี่เป็นคำตอบของ @ Igor เวอร์ชั่น Swift ซึ่งเป็นที่ยอมรับและขอขอบคุณสำหรับคำตอบที่ดีของคุณ

ก่อนไปที่UICollectionViewCellคลาสย่อยของคุณและวางรหัสต่อไปนี้ตามที่อยู่ในชั้นเรียน

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

ฉันใช้ Xcode 7.3.1 และ Swift 2.3 ได้อย่างไร โซลูชันได้รับการทดสอบบน iOS 9.3 ซึ่งทำงานได้อย่างไม่มีที่ติ

ขอบคุณหวังว่านี่จะช่วยได้


ขอโทษสำหรับภาษาอังกฤษไม่ดีของฉันฉันหมายถึง "ทำงานเหมือนเสน่ห์" :)
Aznix

@Aznix ไม่มีปัญหา .. :)
onCompletion

2

ใน swift ให้วางโค้ดต่อไปนี้ในคลาสย่อยเซลล์มุมมองคอลเล็กชัน:

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

นี่คือคำตอบที่ฉันต้องการ ฉันเคยแทนที่ setBounds ใน Objective-C เพื่อแก้ไขปัญหานี้ (ไม่แน่ใจว่าจะเขียนใน Swift อย่างไร) ขอบคุณ :)
Matthew Cawley

1

ฉันพบว่ายังมีปัญหาเกี่ยวกับcontentViewการปรับขนาดใน iOS 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
}

วิธีการนี้ควรจะเรียกว่าหลังจาก dequeuing เซลล์


มันจะเหมาะถ้าวิธีนี้ถูกเรียกโดยอัตโนมัติ ฉันไม่ได้รักมัน แต่นี้สามารถทำได้โดย dequeueReusableCellWithReuseIdentifier:forIndexPath:swizzling
phatmann

Apple ดูเหมือนจะแก้ไขปัญหานี้ใน iOS เวอร์ชัน 8.1 ของ iOS SDK ใน Xcode 6.1 GM (Build 6A1042b) ดังนั้นฉันได้อัปเดตโค้ดด้านบนเพื่อไม่ให้ทำงานเมื่อใช้ 8.1 SDK เมื่อทีมของคุณย้ายไปที่ Xcode 6.1 แล้วคุณสามารถลบแฮ็คนี้ได้ทั้งหมด
phatmann


-1

เพียงตรวจสอบให้แน่ใจว่าคุณทำเครื่องหมายในช่องทำเครื่องหมาย "ปรับขนาดหน้าย่อยอัตโนมัติ" ในปลายปากกาสำหรับเซลล์มุมมองชุดสะสม มันจะทำงานได้ดีบนทั้ง iOS 8 และ iOS 7


ไม่มันไม่ นี่คือเซลล์ต้นแบบที่ฝังตัว
thkeen
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.