ฉันมี UITextView พร้อมข้อความบางส่วนอยู่ ทุกอย่างเป็นไปด้วยดีกับ iOS 6 แต่ตอนนี้ใช้ iOS 7 แล้วมันจะปล่อยพื้นที่ว่างไว้ด้านบนแล้ววางข้อความไว้ด้านล่างตรงกลางของ textview
ฉันไม่ได้ตั้งค่า contentOffSet ใด ๆ กรุณาช่วย!
ฉันมี UITextView พร้อมข้อความบางส่วนอยู่ ทุกอย่างเป็นไปด้วยดีกับ iOS 6 แต่ตอนนี้ใช้ iOS 7 แล้วมันจะปล่อยพื้นที่ว่างไว้ด้านบนแล้ววางข้อความไว้ด้านล่างตรงกลางของ textview
ฉันไม่ได้ตั้งค่า contentOffSet ใด ๆ กรุณาช่วย!
คำตอบ:
มุมมองข้อความคือมุมมองแบบเลื่อน ตัวควบคุมการดูจะเพิ่มการชดเชยเนื้อหาโดยอัตโนมัติเพื่อเลื่อนมุมมองเนื่องจากมีการสันนิษฐานว่าพวกเขาต้องการเลื่อนขึ้นด้านหลังแถบนำทางและแถบสถานะ
เพื่อป้องกันสิ่งนี้ตั้งค่าคุณสมบัติต่อไปนี้บนตัวควบคุมมุมมองที่มีมุมมองข้อความ:
self.automaticallyAdjustsScrollViewInsets = NO
คำตอบในปัจจุบันที่ IronManGill ให้นั้นไม่ใช่วิธีแก้ปัญหาที่ดีเพราะมันไม่ได้อยู่บนพื้นฐานของความเข้าใจว่าทำไมปัญหาจึงเกิดขึ้นตั้งแต่แรก
คำตอบของ jrturton ไม่ใช่วิธีที่สะอาดที่สุดในการแก้ปัญหา คุณไม่จำเป็นต้องลบล้าง ง่าย ๆ เข้าไว้!
สิ่งที่คุณต้องมีคือตั้งค่าสิ่งต่อไปนี้:
self.automaticallyAdjustsScrollViewInsets = NO;
ในเมธอด viewDidLoad
ตรวจสอบเอกสาร: https://developer.apple.com/documentation/uikit/uiviewcontroller/1621372-automaticallyadjustsscrollviewin
automaticallyAdjustsScrollViewInsets
เลิกใช้แล้ว จาก iOS11 ให้ใช้contentInsetAdjustmentBehavior
สิ่งนี้ได้ผลสำหรับฉัน
textView.textContainerInset = UIEdgeInsetsZero;
textView.textContainer.lineFragmentPadding = 0;
ไปที่Interface Builder
:
view controller
ที่มีไฟล์text view
Adjusts Scroll View Insets
คุณสมบัติฉันสงสัยจริงๆว่านี่เป็นคุณสมบัติจริงUIScrollView
หรือUITextView
เปล่า…สิ่งที่ใส่เข้าไปอัตโนมัติ 64 จุดนี้จะถูกเพิ่มก็ต่อเมื่อหรือเป็นความลึกที่มากขึ้นของมุมมองย่อยทั้งหมดของมุมมองของตัวควบคุมมุมมอง ตัวอย่างเช่นหากคุณเพิ่มมุมมองด้านหลัง (ในที่นี้ฉันกำลังพูดถึง z-buffer ไม่ใช่มุมมองการมองเห็น) มุมมองแบบเลื่อนจะไม่เพิ่มสิ่งที่ใส่เข้าไป 64 จุดโดยอัตโนมัติ
ตัวอย่างเช่นอันนี้เพิ่มสิ่งที่ใส่เข้าไป:
ในกรณีนี้จะไม่มีการเพิ่มสิ่งที่ใส่เข้าไป:
สิ่งนี้ดูแปลกสำหรับฉันจริงๆ…เหตุใดระบบปฏิบัติการจึงมองที่ความลึกของมุมมองเพื่อตัดสินใจว่าควรขยายมุมมองหรือไม่
อย่างรวดเร็ว (Xcode 6)
self.automaticallyAdjustsScrollViewInsets = false
viewDidLoad
View Controller ด้วยมุมมองข้อความ
automaticallyAdjustsScrollViewInsets
เลิกใช้แล้ว จาก iOS11 ให้ใช้contentInsetAdjustmentBehavior
คุณสามารถลบพื้นที่ว่างด้านบนของคุณได้UITextView
โดยเพิ่ม:
yourTextView.textContainerInset = UIEdgeInsetsZero;
ฉันแก้ไขปัญหานี้โดยตั้งค่าชดเชยเนื้อหาเป็นค่าลบ นี่คือรหัส Swift
yourTextView.setContentOffset(CGPoint(x: 0, y: -150), animated: true)
[self.textView setContentOffset:CGPointMake(0.f, -self.topLayoutGuide.length) animated:NO];
สิ่งที่คุณต้องเข้าใจคือสิ่งนี้เกี่ยวข้องกับแถบนำทาง:
ฉันลองใช้เคล็ดลับต่อไปนี้ได้ผล
- (void)viewDidLoad{
self.textView.scrollEnabled = NO;
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
self.textView.scrollEnabled = YES;
}
โซลูชันสำหรับ Swift 4:
textView.textContainerInset = UIEdgeInsets.zero
นี่เป็นวิธีแก้ปัญหาที่ไม่เป็นมืออาชีพฉันแน่ใจ ... แต่การใส่ป้ายกำกับเปล่าไว้ด้านหลัง textview ก็ช่วยแก้ปัญหาได้
สิ่งนี้ใช้ได้ผลสำหรับฉัน (พร้อมใช้งานจาก iOS 7)
[<#your UITextViewInstance#> setTextContainerInset:UIEdgeInsetsZero];