IOS 10 में UITextView के शीर्ष पर रिक्त स्थान


116

मेरे पास इसमें कुछ पाठ के साथ UITextView है। IOS 6 के साथ सबकुछ ठीक था, लेकिन अब iOS 7 के साथ यह शीर्ष पर रिक्त स्थान छोड़ देता है और फिर टेक्स्ट के मध्य में पाठ को नीचे रखें।यहां छवि विवरण दर्ज करें

मैंने कोई सामग्री सेट नहीं की थी। कृपया सहायता कीजिए!

जवाबों:


217

एक पाठ दृश्य एक स्क्रॉल दृश्य है। व्यू कंट्रोलर व्यू स्क्रॉल करने के लिए स्वचालित रूप से एक कंटेंट ऑफसेट जोड़ देगा, क्योंकि यह माना जाता है कि वे नेवी बार और स्टेटस बार के पीछे स्क्रॉल करना चाहेंगे।

इसे रोकने के लिए, टेक्स्ट व्यू वाले व्यू कंट्रोलर पर निम्नलिखित प्रॉपर्टी सेट करें:

self.automaticallyAdjustsScrollViewInsets = NO

7
यह एक बेहतर उत्तर है क्योंकि यह न केवल समस्या को ठीक करने के तरीके को संबोधित करता है, बल्कि पहली जगह में ऐसा क्यों होता है।
स्टीफन मेल्विन

1
BTW, आपको उपवर्ग और ओवरराइड नहीं करना है। UITextView को तुरंत करने के बाद बस स्वचालित रूप से AdAdsscrollViewInsets सेट करें।
leftspin

1
@leftspin इसका एक बहुत ही दुर्लभ मामला है जहाँ आपने किसी व्यू कंट्रोलर को उपवर्गित नहीं किया है। और विधि को ओवरराइड करने का मतलब है कि आपका कोड अभी भी निचले iOS संस्करणों पर काम करेगा - संपत्ति सेट करने का मतलब है कि आपको पहले संगतता जांच की आवश्यकता है।
jrturton

1
तो अगर मेरा मॉडल व्यू कंट्रोलर UINavigationController के बाहर है तो ऑफ़सेट क्लियर हो जाएगा? यह एक प्रकार का पागलपन है ... यह व्यवहार केवल तभी सही होता है जब मेरा टेक्स्टव्यू शीर्ष पर संरेखित किया जाता है, अन्यथा यह बकवास है ... क्या कोई समझा सकता है कि Apple ने ऐसा कुछ क्यों किया?
बजे पॉल ब्रेवस्कीस्की

@jrturton ने एक पुरानी पोस्ट के लिए माफी मांगी और कृपया मुझे क्षमा करें क्योंकि मैं ऑब्जेक्टिव-सी के लिए नया हूं लेकिन यह वर्तमान में UIViewController की संपत्ति है ... क्या यह एक तरीका हुआ करता था?
क्रेग

58

आयरनमैनगिल ने जो वर्तमान उत्तर दिया, वह एक अच्छा समाधान नहीं है, क्योंकि यह इस बात की समझ पर आधारित नहीं है कि समस्या पहले स्थान पर क्यों होती है।

jrturton का जवाब भी इसे हल करने का सबसे साफ तरीका नहीं है। आपको ओवरराइड करने की आवश्यकता नहीं है। इसे सरल रखें!

आपको बस निम्नलिखित सेट करना है:

self.automaticallyAdjustsScrollViewInsets = NO;

व्यूडीडलॉड पद्धति में।

डॉक्स देखें: https://developer.apple.com/documentation/uikit/uiviewcontroller/1621372-automaticallyadjustsscrollviewin


1
स्टोरीबोर्ड में बदलाव करें शायद कभी-कभी बेहतर हो। "आइडेंटिटी इंस्पेक्टर" -> "यूजर डिफाइंड रनटाइम अटेंशन" पर जाएं, और वहां एक परिभाषा जोड़ें।
hufeng03

automaticallyAdjustsScrollViewInsets पदावनत किया गया है। IOS11 से, का उपयोग करेंcontentInsetAdjustmentBehavior
Cœur

47

इंटरफ़ेस बिल्डर में,

  • UITextView वाले व्यू कंट्रोलर का चयन करें।
  • विशेषता निरीक्षक पर जाएं।
  • अनचेक करें "स्क्रॉल स्क्रॉल इनसेट समायोजित करें।"

यह ios8 में मेरे मामले के लिए सबसे आसान समाधान है
platinor

3
नोट: यह UIViewController की संपत्ति है। यह नहीं मिल सका और तब मुझे महसूस हुआ कि मैंने पूरी तरह से पाठ नहीं पढ़ा है
Maik639


24

यहां जाएं Interface Builder:

  1. view controllerजिसमें आपका चयन करेंtext view
  2. Adjusts Scroll View Insetsसंपत्ति को अनचेक करें

यहां छवि विवरण दर्ज करें


यह वही था जिसकी मुझे तलाश थी। यह भी आप देखने के लिए 'self.automaticallyAdjustsScrollViewInsets = false' जोड़कर कर सकते हैं
CodeOverRide

यह एक अच्छा और स्पष्ट जवाब है, कि "यह पाठ क्यों नहीं दिख रहा है" के लिए मेरी खोज को समाप्त करने के लिए हुआ।
अप्समप्लर

10

मैं वास्तव में आश्चर्यचकित हूं कि क्या यह एक वास्तविक विशेषता है ... यह 64 बिंदु स्वचालित इनसेट केवल तभी जोड़ा जाता है जब UIScrollViewयाUITextView दृश्य नियंत्रक के दृश्य के सभी उपखंडों की अधिक गहराई के रूप में। उदाहरण के लिए, यदि आप पीछे एक दृश्य जोड़ते हैं (यहां मैं z- बफर के बारे में बात कर रहा हूं, तो imbrication नहीं) स्क्रॉल दृश्य, यह 64 बिंदु इनसेट स्वचालित रूप से जोड़ा नहीं गया है।

उदाहरण के लिए, यह इनसेट जोड़ता है:

यहां छवि विवरण दर्ज करें

इस मामले में, इनसेट नहीं जोड़ा गया है:

यहां छवि विवरण दर्ज करें

यह वास्तव में मेरे लिए अजीब लगता है ... ओएस यह देखने के लिए यह तय करने के लिए कि यह देखने के लिए क्या गहराई तय करनी चाहिए?


6

स्विफ्ट पर (Xcode 6)

 self.automaticallyAdjustsScrollViewInsets = false

में ऐसा viewDidLoadपाठ को देखने के साथ दृश्य नियंत्रक के।
सर्ग

automaticallyAdjustsScrollViewInsets पदावनत किया गया है। IOS11 से, का उपयोग करेंcontentInsetAdjustmentBehavior
Cœur

6

आप UITextViewजोड़कर रिक्त स्थान को अपने शीर्ष पर हटा सकते हैं :

yourTextView.textContainerInset = UIEdgeInsetsZero;

5

मैंने एक नकारात्मक मान के लिए सामग्री ऑफसेट सेट करके इस समस्या को हल किया। यहां स्विफ्ट कोड है।

yourTextView.setContentOffset(CGPoint(x: 0, y: -150), animated: true)

यह सबसे अच्छा समाधान था, इनसेट्स और पारभासी पट्टी को सही ढंग से स्क्रॉल करते हुए। मैं इस संशोधन का सुझाव दूंगा। [self.textView setContentOffset:CGPointMake(0.f, -self.topLayoutGuide.length) animated:NO];
initJason

1
इसके अलावा मेरे लिए कुछ भी काम नहीं किया। स्विफ्ट, एक्सकोड 9.1।
अशोक

1

आपको यह समझना होगा कि यह नेविगेशन बार से संबंधित है:

  • यदि आपकी सामग्री नेविगेशन बार के तहत जाती है, तो आप चाहते हैं कि व्यू कंट्रोलर स्क्रॉल व्यू इनसेट (डिफ़ॉल्ट) को स्वचालित रूप से समायोजित करे।
  • यदि आपकी सामग्री नेविगेशन बार के अंतर्गत नहीं जाती है (आपने संभवतः शीर्ष स्थान की बाधा के लिए शीर्ष लेआउट गाइड का उपयोग किया है), तो आप अधिकांश अन्य उत्तरों में उल्लिखित की तरह स्वचालित स्क्रॉल दृश्य इनसेट समायोजन को अक्षम कर सकते हैं।

1

मैंने निम्नलिखित चाल की कोशिश की, यह काम किया।

- (void)viewDidLoad{
   self.textView.scrollEnabled = NO;  
}       
- (void)viewDidAppear:(BOOL)animated {
   [super viewDidAppear:animated];
   self.textView.scrollEnabled = YES;
}


0

यह एक अव्यवसायिक उपाय है, मुझे यकीन है ... लेकिन टेक्स्टव्यू के पीछे सिर्फ एक खाली लेबल लगाने से समस्या हल हो जाती है।


1
यह एक समाधान नहीं है =)
इल्केर बाल्टासी

0

यह मेरे लिए काम करता है (iOS 7 से उपलब्ध)

[<#your UITextViewInstance#> setTextContainerInset:UIEdgeInsetsZero];
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.