2015-04-09 5 views
7

मैं UITextView बनाता हूं और इसमें बहुत अधिक टेक्स्ट जोड़ता हूं। जब मैं दृश्य लॉन्च करता हूं, तो UITextView हमेशा आंशिक रूप से नीचे स्क्रॉल किया जाता है। कारण उपयोगकर्ता स्क्रॉल कर सकता है, लेकिन यह अजीब लगता है।UITextView को आंशिक रूप से स्क्रॉल किया गया है जब खोला गया

क्या होता है? क्या मुझे कोई स्पष्ट सेटिंग्स याद आई?

कृपया निम्नलिखित छवि का संदर्भ लें। पाठ का हिस्सा काटा जाता है। मैं link से टेक्स्ट उधार लेता हूं।

enter image description here

मैं एक सरल एकल दृश्य आवेदन शुरू कर दिया। यह वह जगह है कि मेरे viewDidLoad की तरह दिखता है:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    NSString* path = [[NSBundle mainBundle] pathForResource:@"license" 
                ofType:@"txt"]; 
    NSString* terms = [NSString stringWithContentsOfFile:path 
               encoding:NSUTF8StringEncoding 
                error:nil]; 
    self.textField.text = terms; 
} 

और ये मेरे स्टोरीबोर्ड है:

enter image description here

यह है कि यह कैसे मैन्युअल रूप से ऊपर तक स्क्रॉल के बाद दिखता है।

enter image description here

+0

आप बात करने के लिए ऊपर स्क्रॉल कर सकते हैं कि यदि आप टेक्स्टव्यू को स्पर्श नहीं करते हैं तो भी आप टेक्स्ट की पहली पंक्ति देखते हैं? मैं यह पूछता हूं क्योंकि टेक्स्टव्यू Navbar के पीछे हो सकता है ... –

+0

@ निकोलस हाँ, मैं बिना किसी समस्या के बैक अप ले सकता हूं। –

+0

हाय @ निकोलस, मैंने अभी एक और स्क्रीनशॉट जोड़ा है। कोई उपाय? –

उत्तर

3

अपने viewDidLoad के अंत में इस पंक्ति जोड़ें अद्यतन करने के बाद यह reseting द्वारा इसे हल:

[self.textField scrollRangeToVisible:NSMakeRange(0, 1)]; 
इस तरह

:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    NSString* path = [[NSBundle mainBundle] pathForResource:@"license" 
                ofType:@"txt"]; 
    NSString* terms = [NSString stringWithContentsOfFile:path 
               encoding:NSUTF8StringEncoding 
                error:nil]; 
    self.textField.text = terms; 
    [self.textField scrollRangeToVisible:NSMakeRange(0, 1)]; 
} 
+1

टिप के लिए धन्यवाद, लेकिन टेक्स्ट के शीर्ष पर अभी भी कुछ पिक्सेल गायब हैं (पैडिंग) – Lope

2

मैं एक ही समस्या थी और मैं पिछले स्क्रॉल स्थिति हो रही है और "पाठ"

CGPoint p = [self.texField contentOffset]; 
self.textField.text = terms; 
[self.textField setContentOffset:p animated:NO]; 
[self.textField scrollRangeToVisible:NSMakeRange([tv.text length], 0)]; 
+3

सामग्री सेट करना CGPointZero पर ऑफ़सेट मेरे लिए काम किया, लेकिन केवल तभी जब मैंने इसे मुख्य थ्रेड पर एसिंक कॉल में भेज दिया। अगर मैंने इसे सीधे डीडलोड पर देखा, तो मैंने पाया कि यह काम नहीं करेगा। – Michael

3

यह लैंडस्केप मोड के तहत सभी आईफोन/आईपॉड उपकरणों पर होता था, और दूसरों द्वारा समाधान काम करेंगे। अब यह केवल आईफोन 6+ या आईफोन 6 एस + के लिए लैंडस्केप मोड के तहत होता है। यह इसके लिए चारों ओर एक काम है:

- (void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     [self.textView scrollRangeToVisible:NSMakeRange(0, 1)]; 
    }); 
} 

दृश्य viewWillAppear के बाद और viewDidAppear से पहले किसी भी तरह स्क्रॉल किया जाता है, और यही कारण है कि हम प्रेषण ऊपर की जरूरत है।

1

Xamarin का उपयोग करने वालों के लिए, यह एकमात्र समाधान है कि मेरे लिए काम करता है:

textView.Text = "very long text"; 

DispatchQueue.MainQueue.DispatchAsync(() => 
{ 
    textView.ContentOffset = new CGPoint(0, 0); 
}); 
0

मेरे लिए सबसे अच्छा काम कर समाधान (वस्तुनिष्ठ सी):

- (void)viewDidLayoutSubviews { 
    [self.myTextView setContentOffset:CGPointZero animated:NO]; 
} 
संबंधित मुद्दे