UIScrollView ความคลุมเครือขนาดเนื้อหาที่เลื่อนได้


510

เพื่อน devs ฉันมีปัญหากับ AutoLayout ในตัวสร้างส่วนต่อประสาน (Xcode 5 / iOS 7) มันเป็นพื้นฐานและสำคัญมากดังนั้นฉันคิดว่าทุกคนควรรู้วิธีการทำงานอย่างถูกต้อง หากนี่เป็นข้อผิดพลาดใน Xcode มันเป็นสิ่งที่สำคัญมาก!

ดังนั้นเมื่อใดก็ตามที่ฉันมีลำดับชั้นการดูเช่นนี้ฉันพบปัญหา:

>UIViewController
>> UIView
>>>UIScrollView
>>>>UILabel (or any other comparable UIKit Element)

UIScrollView มีข้อ จำกัด ที่มั่นคงเช่น 50 px จากทุกด้าน (ไม่มีปัญหา) จากนั้นฉันเพิ่มข้อ จำกัด ของ Space Space ลงใน UILabel (ไม่มีปัญหา) (และฉันสามารถปักหมุดความสูง / ความกว้างของฉลากได้โดยไม่ต้องเปลี่ยนอะไรเลย แต่ควรจะไม่จำเป็นเนื่องจากขนาดที่แท้จริงของฉลาก)

ปัญหาเริ่มต้นขึ้นเมื่อฉันเพิ่มข้อ จำกัด ต่อท้ายใน UILabel:

เช่นการลาก Space ไปที่: Superview เท่ากับ: 25

ขณะนี้มีคำเตือนสองคำเกิดขึ้น - และฉันไม่เข้าใจว่าทำไม:

A)ความคลุมเครือขนาดเนื้อหาที่เลื่อนได้ (มุมมองเลื่อนมีความสูง / ความกว้างของเนื้อหาที่เลื่อนไม่ได้)

B)มุมมองที่วางผิดตำแหน่ง (คาดว่าจะมีฉลาก: x = -67 จริง: x = 207

ฉันทำตัวอย่างเล็ก ๆ น้อย ๆ นี้ในโครงการใหม่สดซึ่งคุณสามารถดาวน์โหลดและแนบภาพหน้าจอได้ อย่างที่คุณเห็น Interface Builder คาดว่า Label จะอยู่ด้านนอกขอบเขตของ UIScrollView (สี่เหลี่ยมผืนผ้าสีส้มประสี่เหลี่ยม) การอัปเดตเฟรมของฉลากด้วยเครื่องมือแก้ไขปัญหาย้ายที่นั่น

โปรดทราบ: หากคุณแทนที่ UIScrollView ด้วย UIView พฤติกรรมจะเป็นไปตามที่คาดไว้ (เฟรมของป้ายกำกับนั้นถูกต้องและเป็นไปตามข้อ จำกัด ) ดังนั้นดูเหมือนว่าจะมีปัญหากับ UIScrollView หรือฉันพลาดสิ่งที่สำคัญ

เมื่อฉันเรียกใช้แอพโดยไม่อัปเดตเฟรมของ Label ตามที่ IB แนะนำไว้ก็อยู่ในตำแหน่งที่ดีตรงที่ควรจะเป็นและ UIScrollView สามารถเลื่อนได้ ถ้าฉันทำการปรับปรุงเฟรมป้ายชื่ออยู่นอกสายตาและ UIScrollView ไม่เลื่อน

ช่วยฉันด้วยโอบีวันเคโนบี! ทำไมรูปแบบที่ไม่ชัดเจน? ทำไมมุมมองที่วางผิดตำแหน่ง

คุณสามารถดาวน์โหลดโครงการตัวอย่างได้ที่นี่และลองดูว่าคุณกำลังทำอะไรอยู่: https://github.com/Wirsing84/AutoLayoutProblem

ภาพประกอบของปัญหาในตัวสร้างส่วนต่อประสาน


8
ลองวาง UILabel ในมุมมองเนื้อหาจากนั้นตั้งค่าขอบต่อท้ายของฉลากเป็นมุมมองเนื้อหา (UIView ปกติ) วิดีโอนี้อาจช่วยคุณได้มาก: youtube.com/watch?v=PgeNPRBrB18&feature=youtu.be
erdekhayser

1
วิดีโอยอดเยี่ยม แต่ไม่ได้แก้ไขคำเตือนสำหรับฉัน :(
Mr Rogers

ขอบคุณมากสำหรับวิดีโอ - มี (ค่อนข้างน่าประหลาดใจ) ค่อนข้างมากที่ฉันเรียนรู้จากมัน! อย่างไรก็ตามเมื่อฉันรวมความรู้ของวิดีโอเข้ากับstackoverflow.com/questions/18953617/ ......ฉันสามารถแก้ไขคำเตือนได้ คำถามที่เหลืออยู่คือ: จะทำให้ขนาด contentView ของ scrollView มีขนาดใหญ่เท่าที่จำเป็นได้อย่างไร?
Wirsing

ลองดูที่นี่วิดีโอ มันแสดงวิธีการใช้ UIScrollLayout และ autolayout ด้วย XCode 5 / iOS 7
jaxvy

ข้อเสนอแนะของฉันไม่ได้ใช้UIScrollViewโดยตรง แทนที่จะใช้UICollectionViewหรือUITableViewให้มากที่สุดส่วนใหญ่ทุกสิ่งเป็นไปได้ด้วยองค์ประกอบเหล่านี้และยังให้ความเรียบง่ายอ่านง่ายและสามารถนำกลับมาใช้ใหม่ได้ !!!
SPatel

คำตอบ:


1093

ดังนั้นฉันจึงแยกออกด้วยวิธีนี้:

  1. ภายในการUIScrollView เพิ่ม a UIView(เราเรียกได้ว่าcontentView);

  2. ในการนี้contentView, ด้านบนชุดล่างด้านซ้ายและอัตรากำไรที่เหมาะสมที่จะ 0 (แน่นอนจากscrollViewซึ่งเป็นsuperView); ตั้งศูนย์ยังจัดในแนวนอนและแนวตั้ง ;

เสร็จแล้ว

ตอนนี้คุณสามารถเพิ่มมุมมองของคุณทั้งหมดในที่contentViewและcontentSizeของจะถูกปรับขนาดโดยอัตโนมัติตามด้วยscrollViewcontentView

ปรับปรุง:

กรณีพิเศษบางอย่างครอบคลุมโดยวิดีโอนี้โพสต์โดย@Sergioในความคิดเห็นด้านล่าง


33
เกือบจะสมบูรณ์แบบยกเว้นว่า scrollview ไม่สามารถเดาความยาวของเนื้อหาของคุณได้อีกต่อไปและปรับขนาดตามความเหมาะสมของขนาดเนื้อหาให้พอดีกับวัตถุภายใน ฉันมี tableview ภายใน contentView ซึ่งความสูงเปลี่ยนแปลง (ผ่านข้อ จำกัด ) และ scrollview ไม่อนุญาตให้ฉันเลื่อน
CyberMew

28
บางทีวิดีโอนี้อาจช่วยแก้ปัญหาที่เหลือทั้งหมดได้
Sergio

46
นี่ไม่ได้ทำให้มันเลื่อนใหญ่
dorian

2
@MatteoGobbi นั่นแหล่ะ! มันหลอก! กำลังดิ้นรนกับปัญหาแบบนี้ของ scrollView autoLayout madness เป็นเวลา 2 วัน .... ขอบคุณครับ !!!
polo987

56
สำหรับทุกคนที่ประสบปัญหากับ ScrollView ที่ไม่สามารถเลื่อนได้การตั้งค่าด้านล่างของ contentView และจัดกึ่งกลาง จำกัด ในแนวตั้งที่มีลำดับความสำคัญต่ำนั้นเป็นเคล็ดลับสำหรับฉัน!
jimmy0251

98

ข้อผิดพลาดนี้ใช้เวลาสักครู่ในการติดตามฉันเริ่มลองขนาดของ ScrollView แล้ว แต่ข้อความแสดงข้อผิดพลาดระบุว่า "ขนาดเนื้อหา" อย่างชัดเจน ฉันทำให้แน่ใจว่าทุกอย่างที่ฉันตรึงไว้จากด้านบนของ ScrollView ถูกตรึงไว้ที่ด้านล่าง ด้วยวิธีนี้ ScrollView สามารถคำนวณความสูงของเนื้อหาโดยค้นหาความสูงของวัตถุและข้อ จำกัด ทั้งหมด สิ่งนี้แก้ไขความสูงของเนื้อหาที่ไม่ชัดเจนความกว้างนั้นค่อนข้างคล้ายกัน ... ตอนแรกฉันมีสิ่งที่ X อยู่ตรงกลางมากที่สุดใน ScrollView แต่ฉันต้องตรึงวัตถุไว้ที่ด้านข้างของ ScrollView ด้วย ฉันไม่ชอบสิ่งนี้เพราะ iPhone6 ​​อาจมีหน้าจอที่กว้างขึ้น แต่มันจะลบข้อผิดพลาด 'ความกว้างของเนื้อหาที่ไม่ชัดเจน'


31
ขอบคุณสำหรับคำตอบ! หากฉันเข้าใจคุณอย่างถูกต้องคุณจะสามารถลบข้อผิดพลาดได้โดยการตรึงแต่ละมุมมองย่อยใน ScrollView ด้านบนและด้านล่าง อย่างไรก็ตามสิ่งนี้ไม่จำเป็น คุณต้องตรวจสอบให้แน่ใจว่ามีวิธีในการสร้างข้อ จำกัด อย่างต่อเนื่องจากด้านบนถึงด้านล่างของ scrollview [-XXX] ฉันหวังว่าจะเข้าใจได้>>
Wirsing

1
จะแก้ไขปัญหาได้อย่างไรถ้ามุมมองมีตัวแปรสูง ฉันจะตั้งค่าข้อ จำกัด ได้อย่างไรเพื่อให้ scrollview สามารถคำนวณขนาดได้
hashier

2
'คุณต้องตรวจสอบให้แน่ใจว่ามีวิธีที่จะทำให้เกิดข้อ จำกัด อย่างต่อเนื่องจากบนลงล่างของ scrollview' <- ขอบคุณสำหรับประโยคนั้น
Adam Waite

3
สิ่งที่ช่วยฉันได้คือตรวจสอบให้แน่ใจว่ามุมมองเลื่อนถูกตรึงไว้กับผู้ดูแลไม่ใช่ผู้แนะนำเลย์เอาต์ด้านบนหรือด้านล่าง ฉันลบข้อ จำกัด สำหรับคำแนะนำเลย์เอาต์ด้านล่างและผ่านเมนูแทนเครื่องมือสร้างอินเตอร์เฟส Editor -> Pin -> Space Bottom ถึง Superview
Alberto Lopez

2
หากคุณต้องการให้ความกว้างของ scrollview เป็นไปตามความกว้างของหน้าจอโทรศัพท์ของคุณหรือองค์ประกอบอื่น ๆ ใน UI ของคุณ (เช่น UIView ที่มีอยู่) คุณต้องตั้งค่า "ความกว้างเท่ากัน" โดยใช้องค์ประกอบอื่นที่อยู่นอก scrollview เพื่อทำการวัด
Departamento B

89

Xcode 11+

วิธีที่ง่ายที่สุดในการใช้autolayout:

  1. เพิ่มUIScrollViewและปักหมุดลง0,0,0,0ใน superview (หรือขนาดที่คุณต้องการ)
  2. เพิ่มUIViewใน ScrollView, ขา0,0,0,0ทั้ง 4 ด้านและศูนย์มันและhorizontallyvertically
  3. ในผู้ตรวจสอบขนาดการเปลี่ยนแปลงbottomและalign center Yลำดับความสำคัญเป็น 250 (สำหรับการเปลี่ยนการเลื่อนแนวนอนtrailingและalign center X)
  4. เพิ่มมุมมองทั้งหมดที่คุณต้องการในมุมมองนี้ อย่าลืมตั้งข้อ จำกัด ด้านล่างในมุมมองต่ำสุด
  5. เลือกเลือกตรวจสอบขนาดและยกเลิกการเลือกUIScrollViewContent Layout Guides

1
ฉันไม่สามารถตั้งค่าความสูงของเนื้อหาของ scrollview แต่ใช้งานได้ :)
Blind Ninja

2
คำแนะนำ: โดยฉันใช้งานได้เฉพาะถ้าฉันลบกึ่งกลางในแนวนอนและแนวตั้งและแทนที่ด้วยความกว้างเท่ากัน (scrollView + มุมมองภายใน scrollView) และเพิ่มความสูงตามเนื้อหาซึ่งหมายความว่าองค์ประกอบสุดท้ายของมุมมองจำเป็นต้องมีข้อ จำกัด ด้านล่าง ดูที่นี่สำหรับข้อมูลเพิ่มเติม: stackoverflow.com/a/54577278/5056173
Sean Stayns

1
ฌอนฉันใช้สิ่งนี้ทุกวันและฉันไม่เคยมีปัญหากับวิธีการนี้เมื่อพูดถึงการเลื่อนดูในแนวตั้งและแนวนอน บางทีคุณลืมที่จะใส่ข้อ จำกัด ด้านล่างในองค์ประกอบต่ำสุด / สุดท้าย หากปราศจากสิ่งนี้สิ่งนี้จะไม่ทำงาน
ĐorđeNilović

7
จุดที่ 4 - ประโยคที่สองคือประโยคที่ใหญ่
Nitish

2
คำตอบนี้ทำงานได้อย่างสมบูรณ์แบบสำหรับฉัน
satvinder singh

63

มันเป็นคำตอบสำหรับคำถามของตัวเองตอบของฉันUIScrollView + Centered View + Ambigous เลื่อนเนื้อหาขนาด + ขนาด

แต่มันครอบคลุมกรณีของคุณอย่างเต็มที่เช่นกัน!

ดังนั้นนี่คือสถานะเริ่มต้นสำหรับกรณีที่ง่ายที่สุด:

  1. scrollView พร้อมข้อ จำกัด 0 ถึงขอบทั้งหมด
  2. ปุ่มอยู่ตรงกลางแนวนอนและแนวตั้งที่มีข้อ จำกัดความกว้างและความสูงคงที่
  3. และแน่นอน - คำเตือนที่น่ารำคาญ และHas ambiguous scrollable content widthHas ambiguous scrollable content height

1

ทั้งหมดที่เราต้องทำคือ:

  • เพิ่มข้อ จำกัด เพิ่มเติม 2 ตัวอย่างเช่น "0" สำหรับการติดตามและ / หรือเว้นวรรคด้านล่างสำหรับมุมมองของเรา (ดูตัวอย่างในภาพหน้าจอด้านล่าง)

สำคัญ:คุณต้องเพิ่มการต่อท้ายและ / หรือข้อ จำกัดด้านล่าง ไม่ใช่ "ผู้นำและสูงสุด" - มันใช้งานไม่ได้!

2

คุณสามารถตรวจสอบในโครงการตัวอย่างของฉันที่แสดงวิธีการแก้ไขปัญหานี้

PS

ตามตรรกะ - การกระทำนี้ควรทำให้เกิด "ข้อ จำกัด ที่ขัดแย้งกัน" แต่ไม่มี!

ฉันไม่รู้ว่าทำไมมันถึงทำงานได้และวิธีการที่ Xcode ตรวจจับข้อ จำกัด ที่สำคัญกว่า (เพราะฉันไม่ได้กำหนดลำดับความสำคัญสำหรับข้อ จำกัด เหล่านี้) ฉันจะขอบคุณถ้ามีคนอธิบายว่าทำไมมันทำงานในความคิดเห็นด้านล่าง


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

ว้าว! สิ่งนี้ไม่ได้สมเหตุสมผลอะไร แต่ได้ผลจริง ๆ ! ขอบคุณ! รายการสุดท้ายที่ฉันมีในมุมมองของฉันฉันตั้งข้อ จำกัด ด้านล่างเป็น 0 และ BANG ในที่สุดก็ทำงานได้
Jakob Hviid

60

Xcode 11+, Swift 5

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

ไม่ควรตรึงมุมมองเนื้อหา (นำหน้า, ต่อท้าย, ด้านบน, ด้านล่าง) เช่นนำไปสู่ภาพ - คู่มือการจัดวางเฟรม

ไม่เหมือน

แต่เป็นเช่นนี้ - คู่มือการจัดวางเนื้อหา

เลือกคำแนะนำเค้าโครงเนื้อหาจากดรอปดาวน์

ป้อนคำอธิบายรูปภาพที่นี่

และจากนั้นคำตอบส่วนใหญ่จะเหมาะกับคุณ

วิธีที่ง่ายที่สุดในตอนนี้จะเป็นเช่นนี้:

  1. ใส่มุมมองเลื่อนในมุมมองรูต
  2. ปักหมุดด้านข้างทั้งหมดของมุมมองเลื่อนไปที่มุมมองกำกับ
  3. ใช้ UIView อีกอัน (จะเรียกว่ามุมมองเนื้อหา) และวางไว้ในมุมมองเลื่อน
  4. ปักหมุดด้านข้างทั้งหมดของมุมมองเนื้อหาเพื่อเลื่อนดูคู่มือเลย์เอาต์เนื้อหาของมุมมอง
  5. ตรึงความกว้างของมุมมองเนื้อหาให้เท่ากับคู่มือกรอบเค้าโครงของมุมมองเลื่อน
  6. แก้ไขความสูงของมุมมองเนื้อหาในแบบที่คุณต้องการ (ฉันใช้ข้อ จำกัด ความสูงคงที่ในตัวอย่างด้านล่าง)

ภาพรวมโครงสร้างของคุณในการนำไปใช้ที่ง่ายที่สุดจะมีลักษณะเช่นนี้

ป้อนคำอธิบายรูปภาพที่นี่


@WantToKnow ไม่จำเป็นต้องควบคุมความสูงเพียงแค่เปลี่ยนลำดับความสำคัญเป็นต่ำ (250)
Reckoner

Xcode 11+, Swift 5. จากคำตอบ @WantToKnow ฉันได้แก้ไขปัญหาของฉันแล้วฉันได้เตรียม [วิดีโอ] [1] และ [รหัส] [2] [1]: youtube.com/watch?v=qMrH5_Yj5hM [2]: github.com/AhmAbdallah/CustomCollectionView
Ahmed Abdallah

1
นี่เป็นคำตอบที่ดีมากขอบคุณ
Constantine

1
นี่คือคำตอบที่ถูกต้อง ขอบคุณ
Vincent Joy

สิ่งนี้ใช้ได้สำหรับฉันเฉพาะเมื่อฉันเพิ่มข้อ จำกัด ด้านล่างให้กับองค์ประกอบสุดท้ายของมุมมองเนื้อหา
D.Zotov

49

คุณต้องสร้างมุมUIViewมองย่อยUIScrollViewตามที่อธิบายไว้ด้านล่าง:

  • UIViewController
  • UIView 'มุมมองหลัก'
    • UIScrollView
      • UIView 'ดูคอนเทนเนอร์'
        • [เนื้อหาของคุณ]

ขั้นตอนที่สองคือการสร้างUIScrollViewข้อ จำกัด ฉันทำสิ่งนี้ด้วยข้อ จำกัด ด้านบนด้านล่างชั้นนำและต่อท้ายไปยัง superView

ต่อไปฉันเพิ่มข้อ จำกัด สำหรับคอนเทนเนอร์ของUIScrollViewและนี่คือที่ที่ปัญหาเริ่มขึ้น เมื่อคุณใส่ข้อ จำกัด ที่เหมือนกัน (บน, ล่าง, นำหน้าและตามหลัง) กระดานเรื่องราวให้ข้อความเตือน:

"มีความกว้างของเนื้อหาที่เลื่อนได้ที่ไม่ชัดเจน" และ "มีความสูงของเนื้อหาที่เลื่อนได้ที่ไม่ชัดเจน"

ดำเนินการต่อด้วยข้อ จำกัด เดียวกันข้างต้นและเพียงแค่เพิ่มข้อ จำกัดEqual HeightและการEqual Widthที่คุณคอนเทนเนอร์ดูในความสัมพันธ์กับมุมมองหลักและไม่ให้UIScrollViewคุณ กล่าวอีกนัยหนึ่งข้อ จำกัด ของมุมมองคอนเทนเนอร์จะเชื่อมโยงกับการUIScrollViewกำกับดูแลของ

หลังจากนั้นคุณจะไม่มีคำเตือนใน Storyboard ของคุณและคุณสามารถเพิ่มข้อ จำกัด สำหรับการสัมภาษณ์


2
ตกลง - ฉันคิดว่าการเพิ่มมุมมองคอนเทนเนอร์เป็นทางออกที่ดีที่สุดและบำรุงรักษาได้ดีที่สุด
Andrew Ebling

1
โซลูชันนี้จะทำงานเมื่อคุณไม่มีแถบนำทางเพื่อจัดการ
Leena

26

ฉันมีปัญหาเดียวกัน ยกเลิกการเลือกช่องทำเครื่องหมายนี้ เนื่องจากคุณกำลังตั้งค่าขนาดเนื้อหาในรหัส ป้อนคำอธิบายรูปภาพที่นี่


24

ในที่สุดฉันก็พบสิ่งนี้ฉันหวังว่ามันจะง่ายต่อการเข้าใจ

คุณมักจะสามารถข้ามคำเตือนนั้นได้โดยเพิ่ม UIView ฐานลงใน scrollview เป็น "มุมมองเนื้อหา" ตามที่กล่าวถึงและทำให้มีขนาดเท่ากับมุมมองเลื่อนของคุณและตั้งค่าพารามิเตอร์ 6 พารามิเตอร์เหล่านี้

ป้อนคำอธิบายรูปภาพที่นี่

อย่างที่คุณเห็นคุณต้องการพารามิเตอร์ทั้งหมด 6 ตัว! ซึ่ง .. ภายใต้สถานการณ์ปกติคุณกำลังทำซ้ำข้อ จำกัด 2 ข้อ แต่นี่เป็นวิธีหลีกเลี่ยงข้อผิดพลาดของกระดานเรื่องราว


1
ข้างต้นเกือบจะได้ผลสำหรับฉันเนื่องจากฉันกังวลเกี่ยวกับความกว้างหน้าจอที่แตกต่างกัน 3 แบบ (4/5, 6, 6+) ฉันตั้งค่ามุมมองเนื้อหาและมุมมองเลื่อนให้มีความกว้างเท่ากัน คุณพูดถูกมันซ้ำซ้อนเพราะฉันได้บอกมุมมองเนื้อหาแล้วว่ามี 0 ส่วนนำหน้าและพื้นที่สิ้นสุด
Stuart P.

8
คุณสามารถตั้งค่าข้อ จำกัด ความกว้างและความสูงเท่ากันจากมุมมองเนื้อหาเป็นมุมมองเลื่อนแทนที่จะเป็นค่าคงที่ มันจะทำงานในการแก้ปัญหาทั้งหมด
Kumar C

ฉันต้องใช้แบบเดียวกันดังนั้นคุณสามารถช่วยฉันได้หรือไม่ว่าฉันต้องตั้งค่าความสูงและความกว้างเท่ากันสำหรับทั้งมุมมองเนื้อหาและมุมมองเลื่อน
Urmi

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

1
@Honey นี่ถูกโพสต์เมื่อ 3 ปีที่แล้ว พวกเขาได้ปรับปรุงบอร์ดโครงเรื่องตั้งแต่นั้นมา ฉันก็สังเกตเห็นว่าคุณสามารถหนีไปได้โดยไม่ต้องดูเนื้อหาในขณะนี้ ฉันจะปรับคำตอบของฉัน
William T.

16

ฉันรู้ว่าฉันอาจจะสาย แต่วิธีแก้ไขปัญหาถัดไปแก้ปัญหาแบบนี้โดยไม่ต้องใช้รหัสเพิ่มเติมเพียงแค่ใช้กระดานเรื่องราว:

สำหรับมุมมองเนื้อหาของคุณคุณต้องตั้งข้อ จำกัด สำหรับช่องว่างนำหน้า / ท้าย / บน / ล่างเพื่อเลื่อนดูและจะไม่เปลี่ยนกรอบมุมมองเนื้อหาเช่นนี้:ป้อนคำอธิบายรูปภาพที่นี่

แน่นอนคุณต้องสร้างข้อ จำกัด เพิ่มเติมสำหรับมุมมองเนื้อหาดังนั้นมุมมองแบบเลื่อนสามารถรู้ขนาดของเนื้อหา ตัวอย่างเช่นการตั้งค่าความสูงคงที่และศูนย์ x

หวังว่านี่จะช่วยได้


7

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

ป้อนคำอธิบายรูปภาพที่นี่


5
นี่จะเป็นการลบคำเตือนและไม่ต้องทำอะไรเพื่อแก้ไขปัญหา
Predrag Manojlovic

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

ฉันคิดว่านี่เป็นคำตอบที่ถูกต้องหากคุณสร้างมุมมองเด็กโดยทางโปรแกรม ขอบคุณ!
Florian Kusche

6

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

http://samwize.com/2014/03/14/how-to-use-uiscrollview-with-autolayout/


3

ดูด้านล่าง: มุมมองเนื้อหาใน scrollview แนวตั้งและแนวนอนรวมศูนย์ คุณมีข้อผิดพลาดความกำกวมตรวจสอบให้แน่ใจว่ามีการเพิ่มสองรายการใน scrollview จากมุมมองเนื้อหาของคุณคือ 1) .button space to container.2) การเว้นวรรคต่อท้ายไปยังข้อ จำกัด ที่ถูกเน้นในภาพหน้าจอ

ข้อ จำกัด เหล่านี้หมายถึงการเลื่อนคือจำนวนที่คุณสามารถเลื่อนได้หลังจากความสูงหรือความกว้างของมุมมองเนื้อหาของคุณ

ป้อนคำอธิบายรูปภาพที่นี่

มันอาจช่วยคุณได้


3

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

ข้อ จำกัด สองข้อต่อไปนี้แก้ปัญหาของฉัน:

trailing = Stack View.trailing - 10
bottom = Stack View.bottom + 76

ซึ่ง: ส่วนท้ายด้านล่างเป็นส่วนท้ายส่วนล่างของ UIScrollView


สิ่งนี้ใช้ได้สำหรับฉันโดยเพิ่มข้อ จำกัด "ถึงด้านล่าง" ตอนนี้ฉันคิดเกี่ยวกับมันมันทำให้รู้สึกที่สมบูรณ์แบบ
SilverWolf - Reinstate Monica

3

ใช้ contentView ( UView) เช่นในภาชนะUIScrollViewติดกับขอบ ( top, bottom, trailing, leading) ของ SuperView ( UIScrollView) และcontentViewควรจะมีequalwidthและequalheightจะ SuperView นั่นคือข้อ จำกัด และวิธีการโทร:

-(void)viewDidLayoutSubviews
{
    [super viewDidLayoutSubviews];
    self.scrollView.contentSize = self.contentView.frame.size;
}

แก้ไขปัญหาสำหรับฉันแล้ว


3

แนวทาง Swift 4+:

1) ตั้งค่า UIScrollView ส่วนบน, ล่าง, ซ้ายและขวาเป็น 0

2) ภายใน UIScrollView เพิ่ม UIView และตั้งค่าส่วนบน, ล่าง, นำหน้า, ต่อท้ายเป็น 0 (เท่ากับ UIScrollView margin)

3) ส่วนที่สำคัญที่สุดคือการตั้งค่าความกว้างและความสูงที่ จำกัด ความสูงควรจะมีความสำคัญต่ำ

private func setupConstraints() {

    // Constraints for scrollView
    scrollView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
    scrollView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
    scrollView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
    scrollView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true

    // Constraints for containerView
    containerView.topAnchor.constraint(equalTo: scrollView.topAnchor).isActive = true
    containerView.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor).isActive = true
    containerView.leadingAnchor.constraint(equalTo: scrollView.leadingAnchor).isActive = true
    containerView.trailingAnchor.constraint(equalTo: scrollView.trailingAnchor).isActive = true
    containerView.widthAnchor.constraint(equalTo: scrollView.widthAnchor).isActive = true

    let heightConstraint = containerView.heightAnchor.constraint(equalTo: scrollView.heightAnchor)
    heightConstraint.priority = UILayoutPriority(rawValue: 250)
    heightConstraint.isActive = true
}

2

@Matteo Gobbi คำตอบนั้นสมบูรณ์แบบ แต่ในกรณีของฉัน scrollview ไม่สามารถเลื่อนได้ฉันลบ " จัดกึ่งกลาง Y " และเพิ่ม " height> = 1 " scrollview จะกลายเป็นแบบเลื่อนได้


2

ผู้ที่กำลังดิ้นรนกับ uiscrollview ไม่เลื่อนเพียงตั้งข้อ จำกัด ด้านล่างของมุมมองเนื้อหาของคุณด้วยเค้าโครงด้านล่างของมุมมองล่าสุดของคุณ (ซึ่งอยู่ภายในมุมมองเนื้อหาของคุณ) อย่าลืมลบข้อ จำกัด ศูนย์ Y

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

ในกรณีของฉันดูครั้งสุดท้ายคือ UILable โดยไม่มีคุณสมบัติบรรทัด = 0 (ซึ่งปรับความสูงโดยอัตโนมัติขึ้นอยู่กับเนื้อหาของมัน) ดังนั้นมันจะเพิ่มความสูงของ uilable แบบไดนามิกและในที่สุดพื้นที่เลื่อนของเราเพิ่มขึ้นเนื่องจากเค้าโครงด้านล่างของ uilable ซึ่งบังคับให้ scrollview เพิ่มเนื้อหาออฟเซ็ต


2

ฉันสร้างวิดีโอบน
youTube Scroll StackViews โดยใช้ Storyboard เฉพาะใน Xcode

ฉันคิดว่าสถานการณ์สองประเภทสามารถปรากฏที่นี่

มุมมองภายใน scrollView -

  1. ไม่มีเนื้อหาที่แท้จริงขนาด (เช่นUIView)
  2. มีเนื้อหาที่แท้จริงของตัวเองขนาด (เช่นUIStackView)

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

  1. ข้อ จำกัด 4 ข้อจากด้านบนซ้ายด้านล่างและขวา

  2. ความกว้างเท่ากับเลื่อนดู (เพื่อหยุดเลื่อนแนวนอน)

คุณไม่จำเป็นต้องมีข้อ จำกัด อื่น ๆ สำหรับการดูที่มีความสูงของเนื้อหาที่แท้จริง

ป้อนคำอธิบายรูปภาพที่นี่


สำหรับมุมมองที่ไม่มีความสูงของเนื้อหาภายในคุณต้องเพิ่มข้อจำกัดความสูง มุมมองจะเลื่อนเมื่อมีข้อจำกัดความสูงมากกว่าความสูงของ scrollView

ป้อนคำอธิบายรูปภาพที่นี่


2
import UIKit

class ViewController: UIViewController {

    //
    let scrollView: UIScrollView = {

        let sv = UIScrollView()
        sv.translatesAutoresizingMaskIntoConstraints = false
        return sv
    }()

    let lipsumLbl: UILabel = { // you can use here any of your subview

        let lbl = UILabel()
        lbl.translatesAutoresizingMaskIntoConstraints = false
        lbl.text = """
        Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce eleifend nisi sit amet mi aliquet, ut efficitur risus pellentesque. Phasellus nulla justo, scelerisque ut libero id, aliquet ullamcorper lectus. Integer id iaculis nibh. Duis feugiat mi vitae magna tincidunt, vitae consequat dui tempor. Donec blandit urna nec urna volutpat, sit amet sagittis massa fringilla. Pellentesque luctus erat nec dui luctus, sed maximus urna fermentum. Nullam purus nibh, cursus vel ex nec, pulvinar lobortis leo. Proin ac libero rhoncus, bibendum lorem sed, congue sapien. Donec commodo, est non mollis malesuada, nisi massa tempus ipsum, a varius quam lorem vitae nunc.

        Cras scelerisque nisi dolor, in gravida ex ornare a. Interdum et malesuada fames ac ante ipsum primis in faucibus. Maecenas vitae nisl id erat sollicitudin accumsan sit amet viverra sapien. Etiam scelerisque vulputate ante. Donec magna nibh, pharetra sed pretium ac, feugiat sit amet mi. Vestibulum in ipsum vitae dui vehicula pulvinar eget ut lectus. Fusce sagittis a elit ac elementum. Fusce iaculis nunc odio, at fermentum dolor varius et. Suspendisse consectetur congue massa non gravida. Sed id elit vitae nulla aliquam euismod. Pellentesque accumsan risus dolor, eu cursus nibh semper id.

        Vestibulum vel tortor tellus. Suspendisse potenti. Pellentesque id sapien eu augue placerat dictum. Fusce tempus ligula at diam lacinia congue in ut metus. Maecenas volutpat tellus in tellus maximus imperdiet. Integer dignissim condimentum lorem, id luctus nisi maximus at. Nulla pretium, est sit amet mollis eleifend, tellus nulla viverra dolor, ac feugiat massa risus a lectus. Pellentesque ut pulvinar urna, blandit gravida ipsum. Nullam volutpat arcu nec fringilla auctor. Integer egestas enim commodo, faucibus neque ac, rutrum magna. Vivamus tincidunt rutrum auctor. Cras at rutrum felis. Fusce elementum lorem ut pharetra venenatis.
        """
        lbl.textColor = .darkGray
        lbl.font = UIFont.systemFont(ofSize: 16)
        lbl.numberOfLines = 0
        return lbl
    }()

    //======================================================================//
    //
    // MARK:- viewDidLoad
    //
    override func viewDidLoad() {
        super.viewDidLoad()

        setupViews()
        setupAutoLayout()
    }

    func setupViews() {

        title = "ScrollView Demo"
        view.backgroundColor = .white
        view.addSubview(scrollView)
        scrollView.addSubview(lipsumLbl)
    }

    func setupAutoLayout() {

        scrollView.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true
        scrollView.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true
        scrollView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
        scrollView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true

        lipsumLbl.leadingAnchor.constraint(equalTo: scrollView.leadingAnchor).isActive = true
        lipsumLbl.topAnchor.constraint(equalTo: scrollView.topAnchor).isActive = true
        lipsumLbl.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true
        lipsumLbl.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true
        lipsumLbl.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor).isActive = true
    }
}

เอาท์พุท:

ป้อนคำอธิบายรูปภาพที่นี่


ทำไมคุณถึงต้องการผู้นำแอปเปิ้ลเมื่อคุณออกจากแอปเปิ้ล
ShadeToD

leftAnchor ไม่สามารถใช้เพื่อจุดประสงค์นี้ได้ดังนั้นเราจึงใช้ LeadingAnchor เพื่อให้ได้ผลเช่นเดียวกัน ..
iAj

คุณใช้ทั้งในตัวอย่างของคุณ
ShadeToD

@ShadeToD ให้ฉันตรวจสอบ
iAj

2

ในกรณีของฉันฉันได้รับปัญหาของขนาดเนื้อหาที่ไม่ถูกต้องและขนาดความกำกวมของเนื้อหาใน iPad แต่ทำงานในกรณีของ iPhone ฉันได้ทำการเปลี่ยนแปลงต่อไปนี้ในกระดานเรื่องราวเพื่อแก้ไขปัญหา

  1. เพิ่ม scrollview ใน UIView และเพิ่มข้อ จำกัด ที่นำหน้าบนท้ายและล่างไปที่ 0,0,0,0
  2. ตั้งค่าความสูงของมุมมองเลื่อนตามข้อกำหนดสำหรับเช่น 100
  3. เพิ่ม UIView เพื่อเลื่อนมุมมองและเพิ่มข้อ จำกัด ที่นำหน้า, ด้านบน, ต่อท้ายและด้านล่างเป็น 0,0,0,0 และจัดข้อ จำกัด center (X) และ center (Y)
  4. ยกเลิกการเลือก "คู่มือการจัดวางเนื้อหา" ในเครื่องมือตรวจสอบขนาดของมุมมองเลื่อน

1

เลื่อนแนวตั้ง

  1. เพิ่ม UIScrollView พร้อมข้อ จำกัด 0,0,0,0 ในการควบคุม
  2. เพิ่ม UIView ใน ScrollView โดยมีข้อ จำกัด 0,0,0,0 ในการควบคุม
  3. เพิ่มข้อ จำกัด ความกว้างเดียวกันสำหรับ UIView ไปยัง UIScrollView
  4. เพิ่มความสูงให้กับ UIView
  5. เพิ่มองค์ประกอบที่มีข้อ จำกัด ใน UIView
  6. สำหรับองค์ประกอบใกล้กับด้านล่างตรวจสอบให้แน่ใจว่ามีข้อ จำกัด ที่ด้านล่างของ UIView

0

สิ่งที่ฉันทำคือสร้างมุมมองเนื้อหาแยกต่างหากดังที่แสดงไว้ที่นี่

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

UIScrollView ถูกเพิ่มไปยังตัวควบคุมมุมมองหลัก

ฉันเพิ่ม contentView ซึ่งลิงก์ผ่าน IBOutlet ไปยังคลาสและตั้ง contentView ของ UIScrollView

UIScrollView พร้อม ContentView ผ่านเครื่องมือสร้างส่วนต่อประสาน


0

ฉันได้รับข้อผิดพลาดเดียวกันฉันทำตามแล้ว

  1. View (SuperView)
  2. ScrollView 0,0,600,600
  3. UIView ข้างใน ScrollView: 0,0,600,600
  4. UIView มีมุมมองภาพป้ายกำกับ

ตอนนี้เพิ่มนำหน้า / ต่อท้าย / บน / ล่างสำหรับ scrollView (2) จากนั้นกด UIView (3)

เลือกมุมมอง (1) และมุมมอง (3) ตั้งค่าความสูงและน้ำหนักเท่ากัน .. มันแก้ไขปัญหาของฉันได้

ฉันทำวิดีโอที่จะช่วย:

https://www.youtube.com/watch?v=s-CPN3xZS1A


0

[ทดสอบใน XCode 7.2 และสำหรับ iOS 9.2]

อะไรระงับข้อผิดพลาด Storyboard และคำเตือนสำหรับผมที่ได้รับการตั้งค่าขนาดที่แท้จริงของมุมมองเลื่อนและมุมมองที่เนื้อหา (ในกรณีของฉัน stackview) เพื่อยึดตำแหน่งยึดตำแหน่งการตั้งค่านี้พบได้ในเครื่องมือตรวจสอบขนาดใน Storyboard และมันบอกว่า - การตั้งค่าขนาดเนื้อหาภายในที่แท้จริงของการออกแบบมีผลเฉพาะมุมมองขณะที่แก้ไขในตัวสร้างส่วนติดต่อ มุมมองจะไม่มีขนาดเนื้อหาภายในที่รันไทม์

ดังนั้นฉันเดาว่าเราจะไม่ผิดโดยตั้งค่านี้

หมายเหตุ: ในกระดานเรื่องราวฉันได้ตรึงขอบทั้งหมดของ scrollview ไปที่ superview และขอบทั้งหมดของ stackview ไปยัง scrollview ในรหัสของฉันฉันได้ตั้งค่าtranslatesAutoresizingMaskIntoConstraintsเป็นเท็จสำหรับทั้ง scrollview และ stackview และฉันยังไม่ได้กล่าวถึงขนาดของเนื้อหา เมื่อ stackview เติบโตแบบไดนามิกข้อ จำกัด ที่กำหนดไว้ในกระดานเรื่องราวจะทำให้แน่ใจว่าสแต็กนั้นสามารถเลื่อนได้

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


0

หากใครก็ตามที่มีพฤติกรรมที่คุณสังเกตเห็นแถบเลื่อนที่ด้านขวา แต่เนื้อหาไม่เคลื่อนไหวความจริงข้อนี้น่าจะคุ้มค่าเมื่อพิจารณา:

นอกจากนี้คุณยังสามารถใช้ข้อ จำกัด ระหว่างเนื้อหาของมุมมองการเลื่อนและวัตถุภายนอกมุมมองการเลื่อนเพื่อให้ตำแหน่งคงที่สำหรับเนื้อหาของมุมมองการเลื่อนทำให้เนื้อหานั้นปรากฏลอยกว่ามุมมองการเลื่อน

นั่นคือจากแอปเปิ้ลของเอกสาร ตัวอย่างเช่นหากคุณกดป้ายชื่อ / ปุ่ม / Img / View ด้านบนไปยังมุมมองด้านนอกของพื้นที่เลื่อนโดยไม่ตั้งใจ (อาจเป็นส่วนหัวหรือบางส่วนเหนือ scrollView หรือไม่) แทนที่จะเป็น contentView คุณจะตรึงเนื้อหาทั้งหมดของคุณไว้


0

ดังที่กล่าวไว้ในคำตอบก่อนหน้านี้คุณควรเพิ่มมุมมองที่กำหนดเองภายในมุมมองเลื่อน:

มุมมองที่กำหนดเองคือ ContentView ที่ทำเครื่องหมายไว้ในภาพ

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

ป้อนคำอธิบายรูปภาพที่นี่

นับจากนี้ไปเมื่อคุณเรียกใช้โครงการมุมมองเลื่อนจะอัปเดตขนาดเนื้อหาโดยอัตโนมัติโดยไม่ต้องใช้รหัสเพิ่มเติม


0

คุณต้องตรวจสอบให้แน่ใจว่ามีวิธีในการสร้างข้อ จำกัด อย่างต่อเนื่องจากด้านบนถึงด้านล่างของ scrollview [-XXX]

ในกรณีของฉัน - การเลื่อนดูในแนวนอน - ฉันจำเป็นต้องเพิ่มข้อ จำกัด ความกว้างและความสูงสำหรับลูกแต่ละคนของมุมมองเลื่อนแม้ว่าโน้ตด้านเทคนิคของ Appleจะไม่บอกคุณ


0

ตั้งค่าขนาดของ ViewController (ขนาดที่ถือ UIScrollView) เป็น Freeform ในตัวตรวจสอบขนาดในตัวสร้างส่วนต่อประสานและทั้งหมดควรใช้งานได้

การตั้งค่าแบบอิสระในตัวตรวจสอบขนาดในตัวสร้างส่วนต่อประสานสำหรับ UIViewcontroller ที่มีอยู่


0

หากคุณยังคงมีปัญหาเกี่ยวกับ UIScrollView เพียงปิดคู่มือเค้าโครงเนื้อหา (เลือก ScrollView คุณใน Xcode Interface Builder -> เลือกขนาดสารวัตรในแผงด้านขวา -> ยกเลิกการเลือก 'เนื้อหาคู่มือเค้าโครง') หรือลองทำตามขั้นตอนเหล่านี้: xcode 11 เลื่อนรูปแบบมุมมอง - มันจะมีประโยชน์สำหรับรูปแบบใหม่ของการจัดวาง ทำงานได้ดีที่ macOS 10.15.2, Xcode 11.3.1 สำหรับ 05.02.2020

ดูภาพหน้าจอ


0

ใช้ Autolayout

เพิ่มมุมมองเลื่อนของคุณภายในมุมมองที่กำหนดไว้อย่างดีจากนั้นเพิ่มมุมมองสแต็กภายในมุมมองเลื่อน

เพิ่มข้อ จำกัด ด้านบนซ้ายขวากลาง X และกึ่งกลาง Y จากมุมมองเลื่อนและมุมมองสแต็กไปยังมุมมองพิเศษที่เกี่ยวข้อง

ตรวจสอบให้แน่ใจว่ามีการเชื่อมโยงข้อ จำกัด จากมุมมองสแต็กไปยัง superview ที่ถูกต้อง (scrollview) เนื่องจากการตั้งค่าเริ่มต้นปัจจุบันคือการเพิ่มข้อ จำกัด Align Top และไม่ใช่ Space หนึ่ง

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