আমি যখনই কোনও পাঠ্য পরিবর্তন করি তখন কীভাবে আমি কোনও ইউআইটিেক্সটভিউ শীর্ষে স্ক্রোল করতে বাধ্য করি?


100

ঠিক আছে, আমার সাথে কিছু সমস্যা হচ্ছে UITextView। সমস্যাটি এখানে:

আমি একটি কিছু পাঠ্য যোগ UITextView। তারপরে ব্যবহারকারী কিছু ক্লিক করতে ডাবল ক্লিক করেন। আমি তারপরে পাঠ্যগুলিকে UITextView(উপরের মতো প্রগঠিতভাবে) এবং UITextView স্ক্রোলগুলি পৃষ্ঠার নীচে পরিবর্তন করেছি যেখানে একটি কার্সার রয়েছে।

যাইহোক, ব্যবহারকারী যেখানে ক্লিক করেছেন তা নয়। UITextViewব্যবহারকারী যেখানে ক্লিক করেছেন তা নির্বিশেষে এটি সর্বদা নীচে স্ক্রল করে ।

সুতরাং এখানে আমার প্রশ্ন: আমি UITextViewপ্রতিবার পাঠ্য পরিবর্তন করার সময় কীভাবে শীর্ষে স্ক্রোল করতে বাধ্য করব? আমি চেষ্টা করেছি contentOffsetএবং scrollRangeToVisible। কোন কাজ।

কোন পরামর্শ প্রশংসা হবে।

উত্তর:


149
UITextView*note;
[note setContentOffset:CGPointZero animated:YES];

এটি আমার জন্য এটি করে

সুইফ্ট সংস্করণ (এক্সকোড 9.3 এ আইওএস 11 সহ সুইফট 4.1):

note.setContentOffset(.zero, animated: true)

13
আমার জন্য সাহায্য করবেন না।
দিমিত্রি

6
এটি কাজ করে, তবে কেন এটি প্রয়োজনীয়? অ্যাপলের স্ক্রোলিং যুক্তিটির পুনঃসংশোধন প্রয়োজন, বেশিরভাগ ক্ষেত্রে স্বয়ংক্রিয়ভাবে সেভাবে আচরণ করার জন্য জিনিসগুলি পেতে খুব বেশি হুপ জাম্পিং রয়েছে।
জন কনটারিনো

4
আইওএস 9 এ আমার জন্য কাজ করে তবে এর আগে নয় viewDidAppear()
মারে সাগাল

4
এটিকে আপনি ভিউডিডঅ্যাপার () এর চেয়ে আগে কল করতে পারেন ভিউডিডিআউটআউটভিউসগুলিতে ()
আর্কেডি বব

আমি টেবিলের ঘরে পাঠ্য দর্শন যোগ করেছি তাই আমি সারি জন্য এটি সেলটিতে স্থাপন করছি তবে কাজ করছে না
চাঁদনী

67

যে কেউ iOS 8 এ এই সমস্যা থাকে, তাহলে আমি দেখেছি যে শুধু সেটিং UITextView'sটেক্সট সম্পত্তি, তারপর কলিং scrollRangeToVisibleএকটি সঙ্গে NSRangeসঙ্গে location:0, length:0, কাজ করেন। আমার পাঠ্য দর্শনটি সম্পাদনাযোগ্য ছিল না এবং আমি উভয়ই বাছাইযোগ্য এবং নির্বাচনযোগ্য নয় (উভয়ই সেটিংয়ের ফলে ফলাফলকে প্রভাবিত করে না) পরীক্ষা করেছিলাম। এখানে একটি সুইফ্ট উদাহরণ রয়েছে:

myTextView.text = "Text that is long enough to scroll"
myTextView.scrollRangeToVisible(NSRange(location:0, length:0))

ধন্যবাদ, উপরের কেউই আমার পক্ষে কাজ করেনি। আপনার নমুনা করেছে।
ব্যবহারকারী 1244109

এটি কাজ করে, তবে আমরা অক্ষম করা দরকার এমন একটি স্ক্রোল অ্যানিমেশন পাই, আমি @ মিগুয়েলের প্রস্তাবিত মতো স্ক্রোলটি অক্ষম করা এবং পুনর্নবীকরণ করতে পছন্দ করি
ওয়ারপজিট

উদ্দেশ্য-সি: [মাই টেক্সটভিউ স্ক্রোলর্যাংটোভিজিবল: এনএসমেকর্যাঞ্জ (0, 0)];
বিবরণী

এটি আর কাজ করবে বলে মনে হচ্ছে না। আইওএস 9 এবং
এক্সকোড

সুইফট 3 স্টলে কাজ! :) আপনার ইউআইটিেক্সটফিলডেলিগেট পদ্ধতিতে কেবল এই লাইনটি অনুলিপি করুন। `Func textViewDidEndEditing (: _ textView: UITextView) {textView.scrollRangeToVisible (NSRange (অবস্থান: 0, দৈর্ঘ্য: 0))}`
lifewithelliott

46

এবং এখানে আমার সমাধান ...

    override func viewDidLoad() {
        textView.scrollEnabled = false
        textView.text = "your text"
    }

    override func viewDidAppear(animated: Bool) {
        textView.scrollEnabled = true
    }

5
আমি এই সমাধানটি পছন্দ করি না, তবে কমপক্ষে আইওএস 9 বিটা 5 হিসাবে, এটি আমার পক্ষে কাজ করে। আমি ধরে নিচ্ছি যে অন্যান্য সমাধানগুলির বেশিরভাগ সমাধান আপনার পাঠ্য ভিউ ইতিমধ্যে দৃশ্যমান ass আমার ক্ষেত্রে এটি সর্বদা সত্য নয়, সুতরাং স্ক্রোলিং প্রদর্শিত না হওয়া পর্যন্ত আমাকে অক্ষম রাখতে হবে।
রোবটস্পেসার

4
এটিই আমার পক্ষে কাজ করেছিল। আইওএস 9, একটি সম্পাদনাযোগ্য পাঠ্যদর্শনটি ব্যবহার করে।
শানআর

4
এটি আমার জন্য কার্যকরী স্ট্রিং সহ আইওএস 8 অ-সম্পাদনযোগ্য পাঠ্যদর্শন works ভিউ উইল অ্যাপে - কাজ করে না
টিনা

আমি @robotspacer এর সাথে একমত এবং এই সমাধানটি এখনও আমার পক্ষে কাজ করে।
lerp90

আমার জন্য, এই সমাধানটি কেবল সংক্ষিপ্ত (বিশিষ্ট) পাঠ্যের সাথে কাজ করেছিল। দীর্ঘতর পাঠ্য থাকা অবস্থায়, ইউআইটিএক্সেক্সটভিউ স্ক্রোল বাগটি জীবিত রাখে :-) আমার (কিছুটা কুৎসিত) সমাধানটি স্ক্রোলিং পুনরায় সক্ষম করার জন্য 2 সেকেন্ড দেরি করে প্রেরণ_পরিবর্তন করা উচিত। ইউআইটিেক্সটভিউটির পাঠ্য বিন্যাসটি করতে অল্প সময়ের প্রয়োজন বলে মনে হচ্ছে ...
শ্রমএটআরস

38

ডাকছে

scrollRangeToVisible(NSMakeRange(0, 0))

কাজ করে কিন্তু এটি কল

override func viewDidAppear(animated: Bool)

4
আমি স্বীকার করি যে এটি আমার জন্য কেবলমাত্র ভিডিড অ্যাপে কাজ করেছে।
এরিক চ।

4
এটিই আমার পক্ষে কাজ করে। ধন্যবাদ. তবে আমি যে অ্যানিমেশনটি সামান্য বিরক্তিকর মনে করি তা কীভাবে অক্ষম করবেন?
রকহামার

যদিও এটি কাজ করে, আমি @ মারিয়ার সমাধান আরও ভাল, কারণ এটি সংক্ষিপ্ত "জাম্প" দেখায় না।
সিপকে শুরস্ট্রা

4
আমি আমার শেষ মন্তব্যটি আবার গ্রহণ করি; এটি আমার পক্ষে সেরা উত্তর কারণ এটি আইওএস 10 এবং আইওএস 11 উভয় ক্ষেত্রেই কাজ করে, যদিও @ মারিয়ার উত্তর আইওএস ১১
সিপকে শুরস্ট্রা

@ সিপস্কুওস্ট্রা, এটিকে কোনও জাম্প ছাড়াই (কেভিও ব্যবহার করে) কাজ করার জন্য নীচে আমার উত্তরটি দেখুন।
টেরি

29

আমি এইচটিএমএলটিতে অ্যাট্রিবিউটড স্ট্রিংটি পাঠ্য প্রদর্শনের সাথে ব্যবহারযোগ্য যা সম্পাদনাযোগ্য নয়। সামগ্রীটি অফসেট সেট করা আমার পক্ষেও কার্যকর হয়নি। এটি আমার পক্ষে কাজ করেছে: স্ক্রোল সক্ষম করে অক্ষম করুন, পাঠ্য সেট করুন এবং তারপরে আবার স্ক্রোলিং সক্ষম করুন

[yourTextView setScrollEnabled:NO];
yourTextView.text = yourtext;
[yourTextView setScrollEnabled:YES];

আমার একটি টেবিলভিউসেলের ভিতরে একটি পাঠ্যদর্শন ছিল। এই ক্ষেত্রে পাঠ্যদর্শনটি প্রায় স্ক্রোল হয়েছে। 50%। এই সমাধানটি যৌক্তিক হিসাবে সহজ। ধন্যবাদ
জুলিয়ান এফ ওয়েইনার্ট

4
@ জুলিয়ানএফ.ওইনার্ট এটি iOS10 এর জন্য কাজ করবে বলে মনে হচ্ছে না। টেবিলভিউসিলের পাঠ্য ভিউয়ের সাথে আমার একই অবস্থা। আমি টেক্সটভিউয়ের সম্পাদনার ক্ষমতা ব্যবহার করছি না। আমি কেবল স্ক্রোলযোগ্য পাঠ্য চাই। আপনি যেমনটি বলেছেন তেমন টেক্সটভিউ সর্বদা প্রায় 50% স্ক্রোল করে থাকে। আমি এই পোস্টে সেট কনটেন্টএফসেট এবং স্ক্রোলরেঞ্জটোভিসিবল সেট করার সাথে অন্যান্য সমস্ত পরামর্শও চেষ্টা করেছি। কোন কাজ। আপনি এই কাজটি করতে আরও কিছু করতে পেরেছেন?
জেফবি 6688

@ JeffB6688 দুঃখিত, না। এটি সত্যিই অনেক দিন আগে ... একটি "নতুন" আইওএস রিলিজের আরও এক গৌরব হতে পারে?
জুলিয়ান এফ ওয়েইনার্ট

তবে দুর্ভাগ্যক্রমে iOS 11.2 এ পুরোপুরি নয়। ওনলু @ রায়ানটিটিবি'র উত্তর আইওএস 10 এবং আইওএস 11 উভয় ক্ষেত্রেই কাজ করে
সিপকে শুরস্ট্রা

এটি এখন পর্যন্ত আইওএস 9, 10 এবং 11 এ আমার পক্ষে ঠিক কাজ করে, তবে viewDidAppearফিক্সগুলির বৃহত্তর গুরুতর অংশ হিসাবে আমাকে এটিকে সক্ষম করতে হয়েছিল
ম্যাডপোগ্রামার

19

যেহেতু এই সমাধানগুলির কোনওটিই আমার পক্ষে কাজ করে না এবং আমি একসাথে সমাধানগুলি পাইক করার জন্য অনেক বেশি সময় নষ্ট করি, অবশেষে এটি আমার জন্য এটি সমাধান করে।

override func viewWillAppear(animated: Bool) {
    dispatch_async(dispatch_get_main_queue(), {
        let desiredOffset = CGPoint(x: 0, y: -self.textView.contentInset.top)
        self.textView.setContentOffset(desiredOffset, animated: false)
    })
}

এটি সত্যিই নির্বোধ যে এটি এই নিয়ন্ত্রণের জন্য ডিফল্ট আচরণ নয়।

আমি আশা করি এটি অন্য কাউকে সাহায্য করবে।


4
এটি খুব সহায়ক ছিল! আমাকে আরও যোগ করতে হয়েছিল: স্ব.আউটটোমেটিক্যাল অ্যাডজাস্টসস্ক্রোলভিউআইনেসেটস = না; এটি সম্পূর্ণরূপে কাজ করার জন্য ইউআইটিেক্সটভিউ যুক্ত ভিউতে
jengelsma

self.textView.contentOffset.yএই জবাবটির উপর ভিত্তি করে অন্য একটি অফসেট ক্যালক দিয়ে আমি কেবল এটি সুইট 3 এ কাজ করেছি : স্ট্যাকওভারফ্লো.com
25366126

একবার আমি সুইফট 3
হাওম্যাক

একেবারে একমত যে এ কেমন পাগল? সমাধানের জন্য ধন্যবাদ
অজোনো

18

আমি আপনার প্রশ্নটি বুঝতে পেরেছি কিনা তা নিশ্চিত নই তবে আপনি কি কেবল দৃশ্যটি শীর্ষে স্ক্রোল করার চেষ্টা করছেন? যদি তাই হয় আপনার করা উচিত

[textview scrollRectToVisible:CGRectMake(0,0,1,1) animated:YES];


4
@ স্যামস্টেওয়ার্ট লিঙ্কটি ভাঙ্গা বলে মনে হচ্ছে, সর্বদা আমার অ্যাকাউন্ট পৃষ্ঠাতে পৌঁছে দেয় (ইতিমধ্যে লগ ইন করা হয়েছে) তারা সেখানে কী সমাধান দেবে সে সম্পর্কে আপনি আরও তথ্য সরবরাহ করতে পারেন?
uliwitness

@ বুলি সাক্ষী এখন এটি অতি পুরানো তথ্য, আমি 8 বছরের পুরানো পোস্টের পরিবর্তে আরও আধুনিক সংস্থান চেষ্টা করার পরামর্শ দেব। আইওএস এপিআই সেই 8 বছরে নাটকীয়ভাবে পরিবর্তিত হয়েছে।
বেনিয়ামিন সুসমান

4
আমি আরও নতুন তথ্য সন্ধান করার চেষ্টা করেছি। আমি কোথায় এটি খুঁজে পেতে পারে তা যদি আপনি জানেন তবে আমি এটির প্রশংসা করব। এখনও একই সমস্যা :( মনে করা হয়
uliwitness

ধন্যবাদ এটি আমার পক্ষে কাজ করেছে কারণ আমি ব্যবহারকারী সংজ্ঞায়িত রানটাইম বৈশিষ্ট্যগুলিতে ইনসেটগুলিও রেখেছিTextView.scrollRectToVisible(CGRect(x: 0,y: 0,width: 1,height: 1), animated: false)
কর্ট লেন

13

আইওএস 10 এবং সুইফট 3 এর জন্য আমি করেছি:

override func viewDidLoad() {
    super.viewDidLoad()
    textview.isScrollEnabled = false
}

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    textView.isScrollEnabled = true
}

আমার জন্য কাজ করেছেন, আপনি যদি সুইফট এবং আইওএসের সর্বশেষতম সংস্করণটি নিয়ে সমস্যাটি পান কিনা তা নিশ্চিত নন।


অনুসরণ করার একটি নিখুঁত সমাধান!
আইচিরাগ

আমি একটি ইউআইপিএজভিউ কনট্রোলার দ্বারা নিয়ন্ত্রিত কোনও ইউআইভিউতে একটি ইউআইটিএক্সেক্সটভিউতে স্ক্রোলিংয়ের সমস্যাটি নিয়ে আসছি। (এই পৃষ্ঠাগুলি আমার সহায়তা / প্রায় পর্দা দেখায়)) আপনার সমাধানটি প্রথম পৃষ্ঠা ব্যতীত প্রতিটি পৃষ্ঠার জন্য কাজ করে। যে কোনও পৃষ্ঠায় স্যুইপ করা এবং প্রথম পৃষ্ঠায় ফিরে যাওয়া সেই প্রথম পৃষ্ঠার স্ক্রোল অবস্থানটি ঠিক করে। আমি অন্য .isScrolEn सक्षम = ভিউউইলঅ্যাপিয়ারে মিথ্যা বলার চেষ্টা করেছি তবে এর কোনও ফল হয়নি। প্রথম পৃষ্ঠাটি কেন বাকীগুলির চেয়ে আলাদা আচরণ করে তা নিয়ে আমি স্ট্যাম্পড আছি।
ওয়েইন হেন্ডারসন

[আপডেট] সবেমাত্র এটি সমাধান! .IsScrolEn सक्षम = সত্য ট্রিগারগুলির প্রথম-লোডের সমস্যার সমাধানের আগে 0.5 সেকেন্ডের বিলম্বের পরিচয় দেওয়া।
ওয়েইন হেন্ডারসন

খুব সুন্দর . । ।
মায়সাম আর

কবজির মতো কাজ করেছেন। একমাত্র সমাধান যা আমার পক্ষে কাজ করে। তুমি আসল পুরুষ.
অলস নিনজা

10

আমার কাছে একটি আপডেট উত্তর আছে যা পাঠ্যদর্শনটি সঠিকভাবে উপস্থিত হবে এবং ব্যবহারকারীর স্ক্রোল অ্যানিমেশনটি ব্যতীত।

override func viewWillAppear(animated: Bool) {
    dispatch_async(dispatch_get_main_queue(), {
        self.introductionText.scrollRangeToVisible(NSMakeRange(0, 0))
    })

আপনি কেন মূল কাতারে করছেন, সাইন ভিউউইলঅ্যাপিয়ারটি মূল কাতারে চলছে?
কার্তিকপ্রভূ আলাগু

4
আমার স্মরণ করার জন্য অনেক চাঁদ আগে তবে এটি এখানে সম্বোধন করা হয়েছে: stackoverflow.com/a/17490329/4750649
ম্যাকইননিস

8

এইভাবে এটি iOS 9 রিলিজে কাজ করেছিল যাতে পাঠ্যভিউ স্ক্রিনে আসার আগে শীর্ষে স্ক্রোল হয়

- (void)viewDidLoad
{
    [super viewDidLoad];
    textView.scrollEnabled = NO;
}

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    textView.scrollEnabled = YES;
}

4
এই কৌশলটি। ঘটনাক্রমে, এটি আমাকে খুব গুরুত্বপূর্ণ কিছু শিখিয়েছিল: 'ভিউইলাপিয়ার'-এর' ভিউ 'কেবল স্ব-দর্শনকেই বোঝায় না, তবে দৃশ্যত সমস্ত মতামতকেই বোঝায়। না?
যাকালেন


7

এটি আমার পক্ষে কাজ করেছে

  override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    DispatchQueue.main.async {
      self.textView.scrollRangeToVisible(NSRange(location: 0, length: 0))
    }
  }

এটি খুব অদ্ভুত। বেশিরভাগ ডিভাইসে, কলটি মোড়ানো DispatchQueue.main.async(...প্রয়োজন হয় না, তবে কোনও কারণে, (উদাহরণস্বরূপ) আইফোন 5 এস (আইওএস 12.1) এ আপনি কাজ না করলে এটি কাজ করে না। কিন্তু ডিবাগারে কল স্ট্যাকের হিসাবে জানা গেছে, viewWillAppear() ইতিমধ্যে সমস্ত ক্ষেত্রে মূল কাতারে চলছে ... - ডাব্লুটিএফ, অ্যাপল ???
নিকোলাস মিয়ারি

4
আমি আরও ভাবছিলাম যে কেন আমি প্রধান কাতারে সমস্ত ইভেন্ট চালিয়ে যাচ্ছি তবে কেন আমাকে মূল কাতারে স্পষ্টভাবে প্রেরণ করতে হবে। তবে এটি আমার পক্ষে কাজ করেছিল
অঙ্কিত গার্গ 20'19

6

পাঠ্যের শীর্ষে কার্সারটি সরানোর জন্য এটি চেষ্টা করুন।

NSRange r  = {0,0};
[yourTextView setSelectedRange:r];

কিভাবে যায় দেখুন। আপনার সমস্ত ইভেন্টগুলি চালিত হওয়ার পরে বা আপনি যে যা করছেন যা হয়ে যাওয়ার পরে আপনি এটি কল করেছেন তা নিশ্চিত করুন।


চেষ্টা করে মানুষ, ভাগ্য নেই। এটি প্রথম রিসপন্ডারের সাথে কিছু বলে মনে হচ্ছে। অন্য কোন পরামর্শ?
স্যাম স্টুয়ার্ট

কার্সার পজিশনে একই সমস্যা রয়েছে, এটি আমার পক্ষে কাজ করেছে ... তার জন্য দুর্দান্ত +1।
ধাওয়াল

আমি নীচে থেকে উপরে অ্যানিমেশন পেয়েছি তবে আমার এটির প্রয়োজন নেই যাতে এটি কীভাবে সরিয়ে ফেলা যায়।
ধাওয়াল

4
এটি শীর্ষে স্ক্রোল করে না (কয়েকটি পিক্সেলের চেয়ে কম)।
দিমিত্রি

6

আমার সমস্যাটি হ'ল প্রদর্শিত হবে যখন টেক্সটভিউ শীর্ষে স্ক্রোল করতে সেট করুন। আইওএস 10.3.2 এবং সুইফট 3 এর জন্য।

সমাধান 1:

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    // It doesn't work. Very strange.
    self.textView.setContentOffset(CGPoint.zero, animated: false)
}
override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)

    // It works, but with an animation effection.
    self.textView.setContentOffset(CGPoint.zero, animated: false)
}

সমাধান 2:

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    // It works.       
    self.textView.contentOffset = CGPoint.zero
}

5

পূর্ববর্তী উত্তরগুলি সমন্বিত, এখন এটি কাজ করা উচিত:

talePageText.scrollEnabled = false
talePageText.textColor = UIColor.blackColor()
talePageText.font = UIFont(name: "Bradley Hand", size: 24.0)
talePageText.contentOffset = CGPointZero
talePageText.scrollRangeToVisible(NSRange(location:0, length:0))
talePageText.scrollEnabled = true

lmao একমাত্র জিনিস যে আমার জন্য কাজ করে কিভাবে নির্বোধ। আমি scrollRangeToVisibleযদিও সরাতে সক্ষম ছিল ।
জর্ডান এইচ

আপনাকে NSRange (0,0) এর সাথে NSMakeRange (0,0)
রবপি


5

শুধু আপনি এই কোড ব্যবহার করতে পারেন

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    textView.scrollRangeToVisible(NSMakeRange(0, 0))
}

4

সুইফট 2 উত্তর:

textView.scrollEnabled = false

/* Set the content of your textView here */

textView.scrollEnabled = true

এটি পাঠ্যদর্শনটি সেট করার পরে পাঠ্যের শেষে স্ক্রোল করা থেকে বাধা দেয়।


4

সুইফ্ট 3 এ:

  • ViewWillLayoutSubviews পরিবর্তন করার জায়গা। ভিউউইল অ্যাপয়ার পাশাপাশি কাজ করা উচিত, তবে যৌক্তিকভাবে, ভিউইলএলআউটসুভিউগুলিতে বিন্যাস সম্পাদন করা উচিত ।

  • পদ্ধতি সংক্রান্ত, উভয় scrollRangeToVisible এবং setContentOffset কাজ করবে। যাইহোক, setContentOffset অ্যানিমেশনটি বন্ধ বা চালু রাখতে দেয়।

ধরে নিন ইউআইটিেক্সটভিউয়ের নাম আপনার ইউআইটিেক্সটভিউ হয়েছে । কোডটি এখানে:

// Connects to the TextView in the interface builder.
@IBOutlet weak var yourUITextView: UITextView!

/// Overrides the viewWillLayoutSubviews of the super class.
override func viewWillLayoutSubviews() {

    // Ensures the super class is happy.
    super.viewWillLayoutSubviews()

    // Option 1:
    // Scrolls to a range of text, (0,0) in this very case, animated.
    yourUITextView.scrollRangeToVisible(NSRange(location: 0, length: 0))

    // Option 2:
    // Sets the offset directly, optional animation.
    yourUITextView.setContentOffset(CGPoint(x: 0, y: 0), animated: false)
}

ভিউউইলএলআউটসউবভিউগুলি যেকোন দর্শন পুনরায় আকারে কল করা হয়। এটি সাধারণত যা আপনি চান তা নয়।
uliwitness

4

আমাকে নীচের ভিউডিডলআউটসউবভিউগুলিতে কল করতে হয়েছিল (ভিউডিডলডের ভিতরে কল করা খুব তাড়াতাড়ি হয়েছিল):

    myTextView.setContentOffset(.zero, animated: true)

3

এটি আমার পক্ষে কাজ করেছে। এটি আরয়ানটিসিবি উত্তরগুলির উপর ভিত্তি করে তবে এটি একই সমাধানের উদ্দেশ্য-সি বৈকল্পিক:

- (void) viewWillAppear:(BOOL)animated {
    // For some reason the text view, which is a scroll view, did scroll to the end of the text which seems to hide the imprint etc at the beginning of the text.
    // On some devices it is not obvious that there is more text when the user scrolls up.
    // Therefore we need to scroll textView to the top.
    [self.textView scrollRangeToVisible:NSMakeRange(0, 0)];
}

3
-(void)viewWillLayoutSubviews{
    [super viewWillLayoutSubviews];

    [textview setContentOffset:CGPointZero animated:NO];
}

ভিউউইলএলআউটসউবভিউগুলি যেকোন দর্শন পুনরায় আকারে কল করা হয়। এটি সাধারণত যা আপনি চান তা নয়।
uliwitness

3
-(void) viewDidAppear:(BOOL)animated{
[mytextView scrollRangeToVisible:NSMakeRange(0,0)];}

- (void)viewWillAppear:(BOOL)animated{
[mytextView scrollRangeToVisible:NSMakeRange(0,0)];}
  • ViewWillappearব্যবহারকারীরা লক্ষ্য করার আগে তা তাত্ক্ষণিকভাবে এটি করবে, তবে ViewDidDisappearবিভাগটি এটি অলসভাবে প্রাণবন্ত করবে।
  • [mytextView setContentOffset:CGPointZero animated:YES]; কখনও কখনও কাজ করে না (কেন আমি জানি না), তাই পরিবর্তে স্ক্রোলর্যাঞ্জিভিজিবল ব্যবহার করুন।


2

সমস্যার সমাধান: আইওএস = 10.2 সুইফ্ট 3 ইউআইটিেক্সটভিউ

আমি কেবল নিম্নলিখিত লাইনটি ব্যবহার করেছি:

displayText.contentOffset.y = 0

4
ওয়ার্কড (আইওএস 10.3)! আমি এটি ভিতরে জুড়েছি viewDidLayoutSubviewsতাই স্ক্রিনটি ঘোরার সময় এটি ঘটে। অন্যথায় বিষয়বস্তু অফসেটটি মিসাইলাইনড হয়।
কুকুরছানা

2

আমার সমস্যা ছিল, তবে আমার ক্ষেত্রে পাঠ্যদর্শনটি হ'ল কিছু কাস্টম দৃশ্যের সাবউভিউ এবং এটিকে ভিউকন্ট্রোলারে যুক্ত করেছে। সমাধানের কোনওটিই আমার পক্ষে কাজ করেনি। সমস্যা সমাধানের জন্য 0.1 সেকেন্ড দেরি এবং তারপরে সক্রিয় স্ক্রোলটি যুক্ত করা হয়েছে। এটা আমার জন্য কাজ করেছে।

textView.isScrollEnabled = false
..
textView.text = // set your text here

let dispatchTime = DispatchTime.now() + 0.1
DispatchQueue.main.asyncAfter(deadline: dispatchTime) {
   self.textView.isScrollEnabled = true
}

1

আমার জন্য এই কোডটি সূক্ষ্মভাবে কাজ করে:

    textView.attributedText = newText //or textView.text = ...

    //this part of code scrolls to top
    textView.contentOffset.y = -64
    textView.scrollEnabled = false
    textView.layoutIfNeeded() //if don't work, try to delete this line
    textView.scrollEnabled = true

সঠিক অবস্থানে স্ক্রোল করার জন্য এবং এটিকে স্ক্রিনের উপরে দেখানোর জন্য আমি এই কোডটি ব্যবহার করি:

    var scrollToLocation = 50 //<needed position>
    textView.contentOffset.y = textView.contentSize.height
    textView.scrollRangeToVisible(NSRange.init(location: scrollToLocation, length: 1))

টেক্সটের শেষে কন্টেন্টঅফসেট.এই স্ক্রোলগুলি সেট করা হচ্ছে এবং তারপরে স্ক্রোলটলওকেশনের মান পর্যন্ত স্ক্রোলরেঞ্জটোভিজিবল স্ক্রোলগুলি। এর মাধ্যমে, স্ক্রোলভিউয়ের প্রথম লাইনে প্রয়োজনীয় অবস্থান উপস্থিত হয়।


1

আইওএস 9 এ আমার জন্য পদ্ধতি স্ক্রোলরেঞ্জটোভিজিবল (1 সারিটি গা bold় ফন্টের সাথে ছিল, অন্যান্য সারিগুলি নিয়মিত ফন্টের সাথে ছিল) দিয়ে বিশিষ্ট স্ট্রিং দিয়ে আমার পক্ষে কাজ করা বন্ধ করে দিয়েছে)

সুতরাং আমাকে ব্যবহার করতে হয়েছিল:

textViewMain.attributedText = attributedString
textViewMain.scrollRangeToVisible(NSRange(location:0, length:0))
delay(0.0, closure: { 
                self.textViewMain.scrollRectToVisible(CGRectMake(0, 0, 10, 10), animated: false)
            })

যেখানে বিলম্ব হয়:

func delay(delay:Double, closure:()->Void) {
    dispatch_after(
        dispatch_time(
            DISPATCH_TIME_NOW,
            Int64(delay * Double(NSEC_PER_SEC))
        ),
        dispatch_get_main_queue(), closure)
}

1

এই 2 লাইনের সমাধানটি ব্যবহার করার চেষ্টা করুন:

view.layoutIfNeeded()
textView.contentOffset = CGPointMake(textView.contentInset.left, textView.contentInset.top)

এটি আমার পক্ষে কাজ করেছে। আমার ইউআইটিএক্সেক্সটভিউ একটি ইউআইসি কলিকেশনভিউসেলের ভিতরে ছিল। আমি সন্দেহ করি যে স্ক্রোলরেঞ্জটও ভিজিবল স্ক্রলগুলি ভুল জায়গায় নিয়ে যায় যদি না লেআউটটি সঠিকভাবে গণনা করা হয়
জন ফাউলর

1

আমার কোডগুলি এখানে। এটা ভাল কাজ করে।

class MyViewController: ... 
{
  private offsetY: CGFloat = 0
  @IBOutlet weak var textView: UITextView!
  ...

  override viewWillAppear(...) 
  {
      ...
      offsetY = self.textView.contentOffset.y
      ...
  }
  ...
  func refreshView() {
      let offSetY = textView.contentOffset.y
      self.textView.setContentOffset(CGPoint(x:0, y:0), animated: true)
      DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) {
        [unowned self] in
        self.textView.setContentOffset(CGPoint(x:0, y:self.offSetY), 
           animated: true)
        self.textView.setNeedsDisplay()
      }
  }
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.