ฉันจะปรับขนาด UIScrollView โดยอัตโนมัติให้พอดีกับเนื้อหาได้อย่างไร


130

มีวิธีUIScrollViewปรับอัตโนมัติตามความสูง (หรือความกว้าง) ของเนื้อหาที่กำลังเลื่อนหรือไม่

สิ่งที่ต้องการ:

[scrollView setContentSize:(CGSizeMake(320, content.height))];

คำตอบ:


306

วิธีที่ดีที่สุดที่ฉันเคยพบในการอัปเดตขนาดเนื้อหาUIScrollViewตามมุมมองย่อยที่มีอยู่:

Objective-C

CGRect contentRect = CGRectZero;

for (UIView *view in self.scrollView.subviews) {
    contentRect = CGRectUnion(contentRect, view.frame);
}
self.scrollView.contentSize = contentRect.size;

รวดเร็ว

let contentRect: CGRect = scrollView.subviews.reduce(into: .zero) { rect, view in
    rect = rect.union(view.frame)
}
scrollView.contentSize = contentRect.size

9
ฉันกำลังเรียกใช้สิ่งนี้viewDidLayoutSubviewsเพื่อให้การจัดวางอัตโนมัติเสร็จสิ้นใน iOS7 มันใช้งานได้ดี แต่การทดสอบระบบปฏิบัติการ iOS6 การจัดวางอัตโนมัติด้วยเหตุผลบางอย่างไม่เสร็จสิ้นการทำงานดังนั้นฉันจึงมีค่าความสูงที่ไม่ถูกต้องดังนั้นฉันจึงเปลี่ยนมาใช้viewDidAppearตอนนี้ได้ดี .. เพียงเพื่อชี้ให้เห็นว่าอาจมีคนต้องการสิ่งนี้ ขอบคุณ
Hatem Alimam

1
ด้วย iOS6 iPad มี UIImageView (7x7) ลึกลับที่มุมล่างขวา ฉันกรองสิ่งนั้นออกไปโดยยอมรับเฉพาะองค์ประกอบ UI (มองเห็น && อัลฟา) จากนั้นก็ใช้งานได้ สงสัยว่า imageView นั้นเกี่ยวข้องกับ scrollBars ไม่ใช่รหัสของฉันแน่นอน
JOM

5
โปรดใช้ความระมัดระวังเมื่อเปิดใช้งาน Scroll Indicators! UIImageView จะถูกสร้างขึ้นโดยอัตโนมัติสำหรับแต่ละรายการโดย SDK คุณต้องพิจารณามิฉะนั้นขนาดเนื้อหาของคุณจะผิด (ดูstackoverflow.com/questions/5388703/… )
AmitP

สามารถยืนยันได้ว่าโซลูชันนี้ทำงานได้อย่างสมบูรณ์แบบสำหรับฉันใน Swift 4
Ethan Humphries

อันที่จริงเราไม่สามารถเริ่มการรวมจาก CGRect.zero ได้ แต่จะใช้ได้เฉพาะเมื่อคุณสร้างมุมมองย่อยบางส่วนในพิกัดเชิงลบ คุณควรเริ่มเฟรมมุมมองย่อยแบบร่วมจากมุมมองย่อยแรกไม่ใช่จากศูนย์ ตัวอย่างเช่นคุณมีมุมมองย่อยเพียงมุมมองเดียวซึ่งเป็น UIView พร้อมเฟรม (50, 50, 100, 100) ขนาดเนื้อหาของคุณจะเป็น (0, 0, 150, 150) ไม่ใช่ (50, 50, 100, 100)
Evgeny

74

UIScrollView ไม่ทราบความสูงของเนื้อหาโดยอัตโนมัติ คุณต้องคำนวณความสูงและความกว้างด้วยตัวคุณเอง

ทำด้วยสิ่งที่ชอบ

CGFloat scrollViewHeight = 0.0f;
for (UIView* view in scrollView.subviews)
{
   scrollViewHeight += view.frame.size.height;
}

[scrollView setContentSize:(CGSizeMake(320, scrollViewHeight))];

แต่จะใช้ได้ผลก็ต่อเมื่อมุมมองอยู่ด้านล่างมุมมองอื่น ๆ หากคุณมีมุมมองที่อยู่ติดกันคุณจะต้องเพิ่มความสูงเพียงครั้งเดียวหากคุณไม่ต้องการตั้งค่าเนื้อหาของตัวเลื่อนให้ใหญ่กว่าที่เป็นจริง


คุณคิดว่าสิ่งนี้จะใช้ได้ดีหรือไม่? CGFloat scrollViewHeight = scrollView.contentSize.height; [scrollView setContentSize: (CGSizeMake (320, scrollViewHeight))]; BTW อย่าลืมถามขนาดและความสูง scrollViewHeight + = view.frame.size.height
มกราคม

การเริ่มต้น scrollViewHeight ไปที่ความสูงจะทำให้ scroller มีขนาดใหญ่กว่าเนื้อหา หากคุณทำเช่นนี้อย่าเพิ่มความสูงของมุมมองที่มองเห็นได้จากความสูงเริ่มต้นของเนื้อหา scroller แม้ว่าคุณอาจต้องการช่องว่างเริ่มต้นหรืออย่างอื่น
emenegro

21
หรือแค่ทำ:int y = CGRectGetMaxY(((UIView*)[_scrollView.subviews lastObject]).frame); [_scrollView setContentSize:(CGSizeMake(CGRectGetWidth(_scrollView.frame), y))];
กัล

@saintjab ขอบคุณฉันเพิ่งเพิ่มเป็นคำตอบอย่างเป็นทางการ :)
Gal

41

วิธีแก้ไขหากคุณใช้รูปแบบอัตโนมัติ:

  • ตั้งค่าtranslatesAutoresizingMaskIntoConstraintsเป็นNOมุมมองทั้งหมดที่เกี่ยวข้อง

  • จัดตำแหน่งและขนาดมุมมองเลื่อนของคุณโดยมีข้อ จำกัด ภายนอกมุมมองเลื่อน

  • ใช้ข้อ จำกัด ในการจัดวางมุมมองย่อยภายในมุมมองแบบเลื่อนตรวจสอบให้แน่ใจว่าข้อ จำกัด นั้นผูกกับขอบทั้งสี่ของมุมมองเลื่อนและไม่ต้องพึ่งพามุมมองแบบเลื่อนเพื่อให้ได้ขนาด

ที่มา: https://developer.apple.com/library/ios/technotes/tn2154/_index.html


10
Imho นี่คือทางออกที่แท้จริงในโลกที่ทุกอย่างเกิดขึ้นด้วยรูปแบบอัตโนมัติ เกี่ยวกับวิธีแก้ปัญหาอื่น ๆ : คุณจริงจังกับการคำนวณความสูงและความกว้างในทุกมุมมองหรือไม่?
Fawkes

ขอบคุณสำหรับการแบ่งปัน! นั่นควรเป็นคำตอบที่ได้รับการยอมรับ
SePröbläm

3
วิธีนี้ใช้ไม่ได้เมื่อคุณต้องการให้ความสูงของมุมมองเลื่อนเป็นไปตามความสูงของเนื้อหา (เช่นป๊อปอัปที่อยู่ตรงกลางหน้าจอซึ่งคุณไม่ต้องการเลื่อนจนกว่าเนื้อหาจะถึงจำนวนหนึ่ง)

สิ่งนี้ไม่ตอบคำถาม
Igor Vasilev

ทางออกที่ดี อย่างไรก็ตามฉันจะเพิ่มสัญลักษณ์แสดงหัวข้อย่อยอีกหนึ่งรายการ ... "อย่าจำกัดความสูงของมุมมองสแต็กย่อยหากควรขยายในแนวตั้งเพียงตรึงไว้ที่ขอบของมุมมองแบบเลื่อน"
Andrew Kirna

35

ฉันเพิ่มสิ่งนี้ในคำตอบของ Espuz และ JCC ใช้ตำแหน่ง y ของมุมมองย่อยและไม่รวมแถบเลื่อน แก้ไขใช้ด้านล่างของมุมมองย่อยที่ต่ำที่สุดที่มองเห็นได้

+ (CGFloat) bottomOfLowestContent:(UIView*) view
{
    CGFloat lowestPoint = 0.0;

    BOOL restoreHorizontal = NO;
    BOOL restoreVertical = NO;

    if ([view respondsToSelector:@selector(setShowsHorizontalScrollIndicator:)] && [view respondsToSelector:@selector(setShowsVerticalScrollIndicator:)])
    {
        if ([(UIScrollView*)view showsHorizontalScrollIndicator])
        {
            restoreHorizontal = YES;
            [(UIScrollView*)view setShowsHorizontalScrollIndicator:NO];
        }
        if ([(UIScrollView*)view showsVerticalScrollIndicator])
        {
            restoreVertical = YES;
            [(UIScrollView*)view setShowsVerticalScrollIndicator:NO];
        }
    }
    for (UIView *subView in view.subviews)
    {
        if (!subView.hidden)
        {
            CGFloat maxY = CGRectGetMaxY(subView.frame);
            if (maxY > lowestPoint)
            {
                lowestPoint = maxY;
            }
        }
    }
    if ([view respondsToSelector:@selector(setShowsHorizontalScrollIndicator:)] && [view respondsToSelector:@selector(setShowsVerticalScrollIndicator:)])
    {
        if (restoreHorizontal)
        {
            [(UIScrollView*)view setShowsHorizontalScrollIndicator:YES];
        }
        if (restoreVertical)
        {
            [(UIScrollView*)view setShowsVerticalScrollIndicator:YES];
        }
    }

    return lowestPoint;
}

1
ยอดเยี่ยม! สิ่งที่ฉันต้องการ
Richard

2
ฉันแปลกใจที่วิธีการเช่นนี้ไม่ใช่ส่วนหนึ่งของชั้นเรียน
João Portela

ทำไมคุณถึงทำself.scrollView.showsHorizontalScrollIndicator = NO; self.scrollView.showsVerticalScrollIndicator = NO;ในตอนต้นและself.scrollView.showsHorizontalScrollIndicator = YES; self.scrollView.showsVerticalScrollIndicator = YES;ตอนท้ายของวิธีการ?
João Portela

ขอบคุณ richy :) +1 สำหรับคำตอบ
Shraddha

1
@richy คุณถูกต้องตัวบ่งชี้การเลื่อนคือมุมมองย่อยถ้ามองเห็นได้ แต่การแสดง / ซ่อนตรรกะผิด คุณต้องเพิ่มพื้นที่ BOOL สองตัว: restoreHorizontal = NO, restoreVertical = NO หาก showsHorizontal ให้ซ่อนตั้งค่า restoreHorizontal เป็น YES เช่นเดียวกันสำหรับแนวตั้ง ถัดไปหลังจาก / ในลูปแทรกคำสั่ง if: ถ้า restoreHorizontal ให้ตั้งค่าให้แสดงเหมือนกันสำหรับแนวตั้ง รหัสของคุณจะบังคับให้แสดงตัวบ่งชี้ทั้งสอง
ผู้อพยพผิดกฎหมาย

13

นี่คือคำตอบที่ได้รับการยอมรับอย่างรวดเร็วสำหรับทุกคนที่ขี้เกียจแปลง :)

var contentRect = CGRectZero
for view in self.scrollView.subviews {
    contentRect = CGRectUnion(contentRect, view.frame)
}
self.scrollView.contentSize = contentRect.size

และอัปเดตสำหรับ Swift3: var contentRect = CGRect.zero เพื่อดูใน self.scrollView.subviews {contentRect = contentRect.union (view.frame)} self.scrollView.contentSize = contentRect.size
drew ..

สิ่งนี้ต้องถูกเรียกในเธรดหลักหรือไม่? และใน didLayoutSubViews?
Maksim Kniazev

8

นี่คือการปรับใช้ Swift 3 ของคำตอบของ @ leviatan:

ส่วนขยาย

import UIKit


extension UIScrollView {

    func resizeScrollViewContentSize() {

        var contentRect = CGRect.zero

        for view in self.subviews {

            contentRect = contentRect.union(view.frame)

        }

        self.contentSize = contentRect.size

    }

}

การใช้งาน

scrollView.resizeScrollViewContentSize()

ใช้งานง่ายมาก!


มีประโยชน์มาก. หลังจากทำซ้ำหลายครั้งฉันพบวิธีนี้และมันก็สมบูรณ์แบบ
Hardik Shah

น่ารัก! เพิ่งใช้งานได้
arvidurs

7

ต่อไปนี้ส่วนขยายจะเป็นประโยชน์ในการสวิฟท์

extension UIScrollView{
    func setContentViewSize(offset:CGFloat = 0.0) {
        // dont show scroll indicators
        showsHorizontalScrollIndicator = false
        showsVerticalScrollIndicator = false

        var maxHeight : CGFloat = 0
        for view in subviews {
            if view.isHidden {
                continue
            }
            let newHeight = view.frame.origin.y + view.frame.height
            if newHeight > maxHeight {
                maxHeight = newHeight
            }
        }
        // set content size
        contentSize = CGSize(width: contentSize.width, height: maxHeight + offset)
        // show scroll indicators
        showsHorizontalScrollIndicator = true
        showsVerticalScrollIndicator = true
    }
}

ตรรกะเหมือนกันกับคำตอบที่ระบุ อย่างไรก็ตามจะละเว้นมุมมองที่ซ่อนอยู่ภายในUIScrollViewและการคำนวณจะดำเนินการหลังจากตั้งค่าตัวบ่งชี้การเลื่อนที่ซ่อนอยู่

นอกจากนี้ยังมีพารามิเตอร์ฟังก์ชันที่เป็นทางเลือกและคุณสามารถเพิ่มค่าออฟเซ็ตได้โดยการส่งผ่านพารามิเตอร์ไปยังฟังก์ชัน


โซลูชันนี้มีสมมติฐานมากเกินไปเหตุใดคุณจึงแสดงตัวบ่งชี้การเลื่อนในวิธีการที่กำหนดขนาดเนื้อหา
Kappe

5

ทางออกที่ดีและดีที่สุดจาก @leviathan เพียงแค่แปลให้รวดเร็วโดยใช้วิธี FP (การเขียนโปรแกรมเชิงฟังก์ชัน)

self.scrollView.contentSize = self.scrollView.subviews.reduce(CGRect(), { 
  CGRectUnion($0, $1.frame) 
}.size

หากคุณต้องการละเว้นมุมมองที่ซ่อนอยู่คุณสามารถกรองมุมมองย่อยก่อนที่จะส่งผ่านเพื่อลด
Andy

อัปเดตสำหรับ Swift 3:self.contentSize = self.subviews.reduce(CGRect(), { $0.union($1.frame) }).size
John Rogers

4

คุณสามารถรับความสูงของเนื้อหาภายใน UIScrollView ได้โดยคำนวณว่าเด็กคนใด "ไปถึงไกลกว่า" ในการคำนวณสิ่งนี้คุณต้องคำนึงถึงจุดเริ่มต้น Y (เริ่มต้น) และความสูงของรายการ

float maxHeight = 0;
for (UIView *child in scrollView.subviews) {
    float childHeight = child.frame.origin.y + child.frame.size.height;
    //if child spans more than current maxHeight then make it a new maxHeight
    if (childHeight > maxHeight)
        maxHeight = childHeight;
}
//set content size
[scrollView setContentSize:(CGSizeMake(320, maxHeight))];

การทำสิ่งต่างๆด้วยวิธีนี้รายการ (มุมมองย่อย) ไม่จำเป็นต้องซ้อนกันโดยตรงภายใต้รายการอื่น


คุณยังสามารถใช้ซับนี้ในลูป: maxHeight = MAX (maxHeight, child.frame.origin.y + child.frame.size.height) ;)
Thomas CG de Vilhena

3

ฉันคิดวิธีแก้ปัญหาอื่นโดยใช้วิธีแก้ปัญหาของ @ emenegro

NSInteger maxY = 0;
for (UIView* subview in scrollView.subviews)
{
    if (CGRectGetMaxY(subview.frame) > maxY)
    {
        maxY = CGRectGetMaxY(subview.frame);
    }
}
maxY += 10;
[scrollView setContentSize:CGSizeMake(scrollView.frame.size.width, maxY)];

โดยพื้นฐานแล้วเราจะทราบว่าองค์ประกอบใดอยู่ไกลที่สุดในมุมมองและเพิ่มช่องว่าง 10px ที่ด้านล่าง


3

เนื่องจาก scrollView สามารถมี scrollViews อื่น ๆ หรือทรี inDepth subViews ที่แตกต่างกันการรันในเชิงลึกแบบวนซ้ำจึงเป็นที่ต้องการ ป้อนคำอธิบายภาพที่นี่

สวิฟต์ 2

extension UIScrollView {
    //it will block the mainThread
    func recalculateVerticalContentSize_synchronous () {
        let unionCalculatedTotalRect = recursiveUnionInDepthFor(self)
        self.contentSize = CGRectMake(0, 0, self.frame.width, unionCalculatedTotalRect.height).size;
    }

    private func recursiveUnionInDepthFor (view: UIView) -> CGRect {
        var totalRect = CGRectZero
        //calculate recursevly for every subView
        for subView in view.subviews {
            totalRect =  CGRectUnion(totalRect, recursiveUnionInDepthFor(subView))
        }
        //return the totalCalculated for all in depth subViews.
        return CGRectUnion(totalRect, view.frame)
    }
}

การใช้

scrollView.recalculateVerticalContentSize_synchronous()

2

หรือเพียงแค่ทำ:

int y = CGRectGetMaxY(((UIView*)[_scrollView.subviews lastObject]).frame); [_scrollView setContentSize:(CGSizeMake(CGRectGetWidth(_scrollView.frame), y))];

(ฉันเพิ่มวิธีแก้ปัญหานี้เป็นความคิดเห็นในหน้านี้หลังจากได้รับคะแนนโหวต 19 คะแนนสำหรับความคิดเห็นนี้ฉันตัดสินใจเพิ่มโซลูชันนี้เป็นคำตอบอย่างเป็นทางการเพื่อประโยชน์ของชุมชน!)


2

สำหรับ swift4 โดยใช้การลด:

self.scrollView.contentSize = self.scrollView.subviews.reduce(CGRect.zero, {
   return $0.union($1.frame)
}).size

ควรตรวจสอบด้วยว่าอย่างน้อยหนึ่งมุมมองย่อยมีต้นกำเนิด == CGPoint.zero หรือเพียงกำหนดจุดเริ่มต้นของมุมมองย่อย (ที่ใหญ่ที่สุดเป็นต้น) เป็นศูนย์
Paul B

ใช้ได้เฉพาะกับผู้ที่แสดงความคิดเห็นด้วย CGRect () หากคุณใช้ข้อ จำกัด นี้จะไม่ทำงาน
linus_hologram

1

ขนาดขึ้นอยู่กับเนื้อหาที่โหลดภายในและตัวเลือกการตัด หากเป็นมุมมองข้อความก็ขึ้นอยู่กับการตัดข้อความจำนวนบรรทัดขนาดตัวอักษรและอื่น ๆ แทบจะเป็นไปไม่ได้เลยที่คุณจะคำนวณตัวเอง ข่าวดีก็คือมีการคำนวณหลังจากโหลดมุมมองและใน viewWillAppear ก่อนหน้านั้นจะไม่ทราบทั้งหมดและขนาดเนื้อหาจะเท่ากับขนาดเฟรม แต่ในเมธอด viewWillAppear และหลัง (เช่น viewDidAppear) ขนาดเนื้อหาจะเป็นขนาดจริง


1

การห่อโค้ดของ Richy ฉันสร้างคลาส UIScrollView แบบกำหนดเองที่ปรับขนาดเนื้อหาโดยอัตโนมัติ!

SBScrollView.h

@interface SBScrollView : UIScrollView
@end

SBScrollView.m:

@implementation SBScrollView
- (void) layoutSubviews
{
    CGFloat scrollViewHeight = 0.0f;
    self.showsHorizontalScrollIndicator = NO;
    self.showsVerticalScrollIndicator = NO;
    for (UIView* view in self.subviews)
    {
        if (!view.hidden)
        {
            CGFloat y = view.frame.origin.y;
            CGFloat h = view.frame.size.height;
            if (y + h > scrollViewHeight)
            {
                scrollViewHeight = h + y;
            }
        }
    }
    self.showsHorizontalScrollIndicator = YES;
    self.showsVerticalScrollIndicator = YES;
    [self setContentSize:(CGSizeMake(self.frame.size.width, scrollViewHeight))];
}
@end

วิธีใช้:
เพียงแค่นำเข้าไฟล์. h ไปยังตัวควบคุมมุมมองของคุณและประกาศอินสแตนซ์ SBScrollView แทน UIScrollView ปกติ


2
layoutSubviews ดูเหมือนว่าจะเป็นตำแหน่งที่เหมาะสมสำหรับโค้ดที่เกี่ยวข้องกับเลย์เอาต์ดังกล่าว แต่ในรูปแบบ UIScrollView Subview จะถูกเรียกทุกครั้งที่มีการอัปเดตการชดเชยเนื้อหาในขณะที่เลื่อน และเนื่องจากขนาดของเนื้อหามักจะไม่เปลี่ยนแปลงในขณะที่เลื่อนจึงค่อนข้างสิ้นเปลือง
Sven

นั่นคือเรื่องจริง วิธีหนึ่งในการหลีกเลี่ยงความไม่มีประสิทธิภาพนี้คือการตรวจสอบ [self isDragging] และ [self isDecelerating] และดำเนินการเลยก็ต่อเมื่อทั้งคู่เป็นเท็จ
Greg Brown

1

กำหนดขนาดเนื้อหาแบบไดนามิกเช่นนี้

 self.scroll_view.contentSize = CGSizeMake(screen_width,CGRectGetMaxY(self.controlname.frame)+20);

0

ขึ้นอยู่กับเนื้อหาจริงๆ: content.frame.height อาจให้สิ่งที่คุณต้องการ? ขึ้นอยู่กับว่าเนื้อหาเป็นสิ่งเดียวหรือสิ่งที่รวบรวม


0

ฉันยังพบคำตอบของเลวีอาธานว่าทำงานได้ดีที่สุด อย่างไรก็ตามมันกำลังคำนวณความสูงแปลก ๆ เมื่อวนลูปผ่านมุมมองย่อยถ้า scrollview ถูกตั้งค่าให้แสดงตัวบ่งชี้การเลื่อนสิ่งเหล่านั้นจะอยู่ในอาร์เรย์ของมุมมองย่อย ในกรณีนี้วิธีแก้ไขคือปิดใช้งานตัวบ่งชี้การเลื่อนชั่วคราวก่อนที่จะวนซ้ำจากนั้นตั้งค่าการมองเห็นก่อนหน้านี้อีกครั้ง

-(void)adjustContentSizeToFit เป็นวิธีการสาธารณะในคลาสย่อยที่กำหนดเองของ UIScrollView

-(void)awakeFromNib {    
    dispatch_async(dispatch_get_main_queue(), ^{
        [self adjustContentSizeToFit];
    });
}

-(void)adjustContentSizeToFit {

    BOOL showsVerticalScrollIndicator = self.showsVerticalScrollIndicator;
    BOOL showsHorizontalScrollIndicator = self.showsHorizontalScrollIndicator;

    self.showsVerticalScrollIndicator = NO;
    self.showsHorizontalScrollIndicator = NO;

    CGRect contentRect = CGRectZero;
    for (UIView *view in self.subviews) {
        contentRect = CGRectUnion(contentRect, view.frame);
    }
    self.contentSize = contentRect.size;

    self.showsVerticalScrollIndicator = showsVerticalScrollIndicator;
    self.showsHorizontalScrollIndicator = showsHorizontalScrollIndicator;
}

0

ฉันคิดว่านี่อาจเป็นวิธีที่เรียบร้อยในการอัปเดตขนาดมุมมองเนื้อหาของ UIScrollView

extension UIScrollView {
    func updateContentViewSize() {
        var newHeight: CGFloat = 0
        for view in subviews {
            let ref = view.frame.origin.y + view.frame.height
            if ref > newHeight {
                newHeight = ref
            }
        }
        let oldSize = contentSize
        let newSize = CGSize(width: oldSize.width, height: newHeight + 20)
        contentSize = newSize
    }
}

0

ทำไมไม่โค้ดบรรทัดเดียว ??

_yourScrollView.contentSize = CGSizeMake(0, _lastView.frame.origin.y + _lastView.frame.size.height);

0
import UIKit

class DynamicSizeScrollView: UIScrollView {

    var maxHeight: CGFloat = UIScreen.main.bounds.size.height
    var maxWidth: CGFloat = UIScreen.main.bounds.size.width

    override func layoutSubviews() {
        super.layoutSubviews()
        if !__CGSizeEqualToSize(bounds.size,self.intrinsicContentSize){
            self.invalidateIntrinsicContentSize()
        }
    }

    override var intrinsicContentSize: CGSize {
        let height = min(contentSize.height, maxHeight)
        let width = min(contentSize.height, maxWidth)
        return CGSize(width: width, height: height)
    }

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