আমি এমন একটি পরিস্থিতিতে এই আচরণটি অনুকরণ করার চেষ্টা করছিলাম যেখানে আমার কোনও ইউআইটিবেল ভিউয়ের কাছে বসে একটি কাস্টমাইজড শিরোনাম প্রয়োজন। আমি আমার নিজের "নেভিগেশন" বারটি ঘুরিয়েছি কারণ এটি পৃষ্ঠায় অন্যান্য স্টাফগুলির একগুচ্ছের নীচে বসে আছে এবং আমি বিভাগের শিরোনামগুলি ডিফল্ট "ডকিং" আচরণ অনুসরণ করতে চাইছিলাম। আমি মনে করি যে আমি ইউআইটিএবলভি / ইউআইএসক্রোলভিউকে ফেসবুক / ইনস্টাগ্রাম / ক্রোম / ইত্যাদির মতো দেখা যায় এমন একটি স্টাইলে অন্য অবজেক্টের সাথে একত্রে সামঞ্জস্য করার জন্য বেশ চতুর এবং সংক্ষিপ্ত উপায় খুঁজে পেয়েছি। অ্যাপ্লিকেশন রয়েছে।
আমার .xib ফাইলে, আমি আমার উপাদানগুলি একটি ফ্রিফর্ম ভিউতে লোড করেছি: http://imgur.com/0z9yebJ (দুঃখিত, ছবিগুলির ইনলাইন করার জন্য রেপ নেই)
লক্ষ্য করুন যে, বাম সাইডবারে, টেবিলটি প্রধান শিরোনামের দৃশ্যের পিছনে অর্ডার করা হয়েছে। আপনি স্ক্রিনশট থেকে বলতে পারবেন না, তবে এটিতে প্রধান শিরোনামের মত একই y অবস্থান রয়েছে। যেহেতু এটি দৃষ্টিকোণ থেকে প্রসারিত, তাই ইউআইটিবেবল ভিউতে বিষয়বস্তু ইনসেট সম্পত্তি 76 ((মূল শিরোনামের দৃশ্যের উচ্চতা) সেট করে।
মূল হেডার ভিউ স্লাইডটি ইউআইএসক্রোলভিউয়ের সাথে একযোগে তৈরি করতে, আমি কিছু গণনা সম্পাদন করতে এবং ইউআইএসক্রোলভিউয়ের সামগ্রীবিন্যাসের পাশাপাশি প্রধান শিরোলেখের ফ্রেমের ফ্রেমগুলিকে পরিবর্তন করতে ইউআইএসক্রলভিউ ডেলিগেটের স্ক্রোলভিউডিডসক্রোল পদ্ধতি ব্যবহার করি।
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
UIEdgeInsets insets = scrollView.contentInset;
//tableViewInsetDelta and tableViewOriginalInsetValue are NSInteger variables that I set to 0 and 76, respectively, in viewDidLoad
tableViewInsetDelta = tableViewOriginalInsetValue + scrollView.contentOffset.y;
insets.top = tableViewOriginalInsetValue - tableViewInsetDelta;
if (scrollView.contentOffset.y > -76 && scrollView.contentOffset.y < 0) {
[scrollView setContentInset:insets];
self.pathTitleContainer.frame = CGRectMake(self.pathTitleContainer.frame.origin.x, 44 - tableViewInsetDelta, self.pathTitleContainer.frame.size.width, self.pathTitleContainer.frame.size.height);
} else if (scrollView.contentOffset.y > 0) {
insets.top = 0;
[scrollView setContentInset:insets];
self.pathTitleContainer.frame = CGRectMake(self.pathTitleContainer.frame.origin.x, -32, self.pathTitleContainer.frame.size.width, self.pathTitleContainer.frame.size.height);
} else if (scrollView.contentOffset.y < -76) {
insets.top = 76;
[scrollView setContentInset:insets];
self.pathTitleContainer.frame = CGRectMake(self.pathTitleContainer.frame.origin.x, 44, self.pathTitleContainer.frame.size.width, self.pathTitleContainer.frame.size.height);
}
}
প্রথম যদি বিবৃতিটি ভারী উত্তোলন বেশিরভাগ ক্ষেত্রে করে তবে আমি পরিস্থিতিগুলি পরিচালনা করতে অন্য দুটিকে অন্তর্ভুক্ত করতে হয়েছিল যেখানে ব্যবহারকারী জোর করে টেনে নিয়ে যাচ্ছেন এবং স্ক্রোলভিউডিডস্রোকলের কাছে প্রেরিত প্রাথমিক কন্টেন্টঅফসেট মানগুলি যদি প্রথম ব্যাপ্তির বাইরে থাকে তবে বিবৃতিটির ।
শেষ পর্যন্ত, এটি আমার জন্য সত্যই ভাল কাজ করছে। আমি আমার প্রকল্পগুলি স্ফীত সাবক্লাসগুলির একটি গুচ্ছ সহ লোড করা ঘৃণা করি। এটি সবচেয়ে ভাল সমাধান পারফরম্যান্স-ভিত্তিক কিনা তা নিয়ে আমি কথা বলতে পারছি না (যেহেতু এটি সর্বকালে বলা হয়ে থাকে তাই আমি কোনও কোড স্ক্রোলভিউডিসক্রোকলটিতে রাখতে সবসময়ই দ্বিধা বোধ করি), তবে কোড পাদদেশচিহ্নটি আমার মধ্যে দেখা সবচেয়ে ছোটতম এই সমস্যার সমাধান এবং এটি কোনও ইউআইএসক্রোলভিউতে কোনও ইউআইটিএলভিউতে বাসা বাঁধে না (অ্যাপল ডকুমেন্টেশনে এর বিরুদ্ধে পরামর্শ দেয় এবং স্পর্শ ইভেন্টগুলি ইউআইটিএবলভিউতে কিছুটা মজার থাকে)। আশা করি এটি কাউকে সাহায্য করবে!