لا يعمل التمرير إلى الأعلى عند استخدام UIWebView مع PushViewController، ويبحث عن حل

StackOverflow https://stackoverflow.com/questions/1808063

  •  05-07-2019
  •  | 
  •  

سؤال

لدي تطبيق به عرض جدول في الجذر في وحدة تحكم التنقل، وعند تحديد خلية جدول يعرض وحدة تحكم عرض جديدة تحتوي فقط على UIWebView (مع شريط أدوات وشريط تنقل).

اعتمادًا على كيفية تقديم عرض الويب الجديد، فإن الميزة التي يمكن للمستخدم من خلالها النقر على شريط الحالة في الأعلى وتمرير عرض الويب إلى الأعلى، إما أن تعمل أو لا تعمل.

إذا كنت تستخدم:

  • (باطل)حاضرModalViewController:(UIViewController *)modalViewController متحرك:(BOOL) متحرك

في RootView، يتم تمرير عرض الويب إلى الأعلى.

إذا قمت بتغيير سطر واحد من التعليمات البرمجية واستخدمت بدلاً من ذلك:

  • (باطل)pushViewController:(UIViewController *)viewController متحرك:(BOOL) متحرك

على وحدة التحكم في التنقل، فإن ميزة التمرير إلى الأعلى تتوقف عن العمل.

ولكن ما أرغب حقًا في استخدامه، لأسباب أخرى في سياق التطبيق، هو طريقة PushViewController.ولكن، أريد أيضًا الاحتفاظ بسلوك التمرير إلى الأعلى.

لقد قمت حتى الآن بتجربة طرق مختلفة، بعضها موصوف هنا:

-محاولة تعيين خاصية التمرير الداخلي لعرض الويب، التمرير إلى الأعلى

((UIScrollView *)[[webView valueForKey:@"_internal"] valueForKey:@"scroller"]).scrollsToTop = YES;

(لا يوجد تأثير ملحوظ).

-تغيير ترتيب إعداد خصائص NavBar أو عدم تعيين أي منها على الإطلاق -إضافة مكالمات إضافية "نافذة makeKeyAndOrderFront" بعد دفع العرض الجديد.

لا أعتقد أن هناك وجهات نظر أخرى يمكن أن تطالب بخاصية "scrollsToTop" (ويثبت الاختبار الأول أعلاه ذلك على أي حال).

باستثناء محاولة تضمين UIWebView في UIScrollView، وهو الأمر الذي أتوقع أن يكون مؤلمًا، فقد نفدت الطرق لاستكشافها لحل هذه المشكلة.

آمل أن يجد شخص آخر طريقة لتصحيح هذا؟

هل كانت مفيدة؟

المحلول 2

اتضح أنه لم يكن يعمل بسبب الطريقة التي كنت أخصص بها شريط التنقل.كنت أتجاوز leftBarButtonItem باستخدام UIBarButtonItem الذي استحوذ بعد ذلك على شريط التنقل بأكمله (أعتقد أنني اتبعت هذا النهج من بعض أكواد Apple منذ عدة أشهر، لكنني لست متأكدًا).كنت أستخدم نفس الأسلوب في عرض آخر وكان التمرير إلى الأعلى يعمل بشكل جيد هناك.

أدى إخراج هذا الرمز ووضع عرض Navbar المخصص في (على سبيل المثال)self.navigationController.titleView إلى حل هذه المشكلة بدلاً من ذلك.أنا لا أعرف حقا لماذا، كما أقول أنه يعمل بشكل جيد لوجهات النظر الأخرى.

لقد أهدرت الكثير من الوقت مع هذه المشكلة، لذا آمل أن أنقذ شخصًا آخر بعض الشعر من خلال وصفها هنا :)

نصائح أخرى

جرب النهج العكسي كحل بديل.

في وحدة تحكم العرض الجذر:

- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    self.tableView.scrollsToTop = NO;
}

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    self.tableView.scrollsToTop = YES;
}

الوداع!

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top