উত্তর:
setContentOffset:animated:
কন্টেন্ট ভিউয়ের যে কোনও অংশে স্ক্রোল করতে আপনি ইউআইএসক্রোলভিউয়ের ফাংশনটি ব্যবহার করতে পারেন । এখানে কিছু কোড যা নীচের দিকে স্ক্রোল করুন করবে, আপনার scrollView অভিমানী হয় self.scrollView
:
CGPoint bottomOffset = CGPointMake(0, self.scrollView.contentSize.height - self.scrollView.bounds.size.height + self.scrollView.contentInset.bottom);
[self.scrollView setContentOffset:bottomOffset animated:YES];
আশা করি এইটি কাজ করবে!
CGPoint bottomOffset = CGPointMake(0, self.scrollView.contentSize.height - self.scrollView.bounds.size.height + self.scrollView.contentInset.bottom);
contentSize
চেয়ে কম হলে এটি সঠিকভাবে কাজ করবে না bounds
। সুতরাং এটি এর মতো হওয়া উচিত:scrollView.setContentOffset(CGPointMake(0, max(scrollView.contentSize.height - scrollView.bounds.size.height, 0) ), animated: true)
let bottomOffsetY = max(collectionView.contentSize.height - collectionView.bounds.height + collectionView.contentInset.bottom, 0)
সহজ অনুলিপি পেস্ট করার জন্য গৃহীত উত্তরের সুইফ্ট সংস্করণ:
let bottomOffset = CGPoint(x: 0, y: scrollView.contentSize.height - scrollView.bounds.size.height)
scrollView.setContentOffset(bottomOffset, animated: true)
সহজ সমাধান:
[scrollview scrollRectToVisible:CGRectMake(scrollview.contentSize.width - 1,scrollview.contentSize.height - 1, 1, 1) animated:YES];
বিদ্যমান উত্তরের জন্য কেবল একটি বর্ধন।
CGPoint bottomOffset = CGPointMake(0, self.scrollView.contentSize.height - self.scrollView.bounds.size.height + self.scrollView.contentInset.bottom);
[self.scrollView setContentOffset:bottomOffset animated:YES];
এটি নীচের ইনসেটটিরও যত্ন নেয় (আপনি যদি কীবোর্ডটি দৃশ্যমান থাকে তখন আপনার স্ক্রোল ভিউ সামঞ্জস্য করতে এটি ব্যবহার করছেন)
সামগ্রীটিকে আকারের উচ্চতায় অফসেট সেট করা ভুল: এটি সামগ্রীর নীচের অংশে শীর্ষে স্ক্রোল করে স্ক্রোল দৃশ্যের স্ক্রোল করে এবং এভাবে দৃষ্টির বাইরে।
সঠিক সমাধানটি হ'ল লিখিত সামগ্রীর নীচের অংশে স্ক্রোল ভিউয়ের নীচে স্ক্রোল করা ( sv
এটি হল ইউআইএসক্রোলভিউ):
CGSize csz = sv.contentSize;
CGSize bsz = sv.bounds.size;
if (sv.contentOffset.y + bsz.height > csz.height) {
[sv setContentOffset:CGPointMake(sv.contentOffset.x,
csz.height - bsz.height)
animated:YES];
}
if (sv.contentOffset.y + csz.height > bsz.height) {
?
setContentOffset:
গুরুত্বপূর্ণ কমান্ড।
একটি দ্রুত বাস্তবায়ন:
extension UIScrollView {
func scrollToBottom(animated: Bool) {
if self.contentSize.height < self.bounds.size.height { return }
let bottomOffset = CGPoint(x: 0, y: self.contentSize.height - self.bounds.size.height)
self.setContentOffset(bottomOffset, animated: animated)
}
}
এটা ব্যবহার করো:
yourScrollview.scrollToBottom(animated: true)
একটি দ্রুতগতি 2.2 সমাধান, গ্রহণ contentInset
একাউন্টে
let bottomOffset = CGPoint(x: 0, y: scrollView.contentSize.height - scrollView.bounds.size.height + scrollView.contentInset.bottom)
scrollView.setContentOffset(bottomOffset, animated: true)
এটি একটি এক্সটেনশনে হওয়া উচিত
extension UIScrollView {
func scrollToBottom() {
let bottomOffset = CGPoint(x: 0, y: contentSize.height - bounds.size.height + contentInset.bottom)
setContentOffset(bottomOffset, animated: true)
}
}
নোট করুন যে আপনি bottomOffset.y > 0
স্ক্রোলের আগে পরীক্ষা করতে চাইতে পারেন
এর contentSize
চেয়ে কম হলে কী হবেbounds
?
সুইফ্টের জন্য এটি হ'ল:
scrollView.setContentOffset(CGPointMake(0, max(scrollView.contentSize.height - scrollView.bounds.size.height, 0) ), animated: true)
উপরে যান
- CGPoint topOffset = CGPointMake(0, 0);
- [scrollView setContentOffset:topOffset animated:YES];
নীচে স্ক্রোল করুন
- CGPoint bottomOffset = CGPointMake(0, scrollView.contentSize.height - self.scrollView.bounds.size.height);
- [scrollView setContentOffset:bottomOffset animated:YES];
আপনি যদি ইউআইটিএবল ভিউ (যা ইউআইএসক্রোলভিউয়ের একটি উপশ্রেণী) ব্যবহার করছেন সে ক্ষেত্রে এটি করার আরও একটি কার্যকর উপায়ও পেয়েছি:
[(UITableView *)self.view scrollToRowAtIndexPath:scrollIndexPath atScrollPosition:UITableViewScrollPositionBottom animated:YES];
সুইফটে setContentOffset:animated:
নীচে স্ক্রোল করতে ইউআইএসক্রোলভিউয়ের ক্রিয়া ব্যবহার করা ।
let bottomOffset : CGPoint = CGPointMake(0, scrollView.contentSize.height - scrollView.bounds.size.height + scrollView.contentInset.bottom)
scrollView.setContentOffset(bottomOffset, animated: true)
দেখে মনে হচ্ছে এখানকার সমস্ত উত্তর নিরাপদ অঞ্চলটিকে বিবেচনায় নেয় নি। আইওএস ১১-এর পর থেকে, আইফোন এক্সের একটি নিরাপদ অঞ্চল চালু হয়েছিল। এটি স্ক্রোলভিউগুলিকে প্রভাবিত করতে পারে contentInset
।
আইওএস 11 এবং ততোধিক বিষয়বস্তুতে অন্তর্ভুক্ত সামগ্রী অন্তর্ভুক্ত সহ সঠিকভাবে নীচে স্ক্রোল করতে। এর adjustedContentInset
পরিবর্তে আপনার ব্যবহার করা উচিত contentInset
। এই কোডটি পরীক্ষা করুন:
let bottomOffset = CGPoint(x: 0, y: scrollView.contentSize.height - scrollView.bounds.height + scrollView.adjustedContentInset.bottom)
scrollView.setContentOffset(bottomOffset, animated: true)
CGPoint bottomOffset = CGPointMake(0, self.scrollView.contentSize.height - self.scrollView.bounds.size.height + self.scrollView.adjustedContentInset.bottom);
[self.scrollView setContentOffset:bottomOffset animated:YES];
contentOffset.x
):extension UIScrollView {
func scrollsToBottom(animated: Bool) {
let bottomOffset = CGPoint(x: contentOffset.x,
y: contentSize.height - bounds.height + adjustedContentInset.bottom)
setContentOffset(bottomOffset, animated: animated)
}
}
তথ্যসূত্র:
সুইফট:
আপনি এর মতো এক্সটেনশন ব্যবহার করতে পারেন:
extension UIScrollView {
func scrollsToBottom(animated: Bool) {
let bottomOffset = CGPoint(x: 0, y: contentSize.height - bounds.size.height)
setContentOffset(bottomOffset, animated: animated)
}
}
ব্যবহার করুন:
scrollView.scrollsToBottom(animated: true)
বিভাগ উদ্ধার!
এটিকে কোনও অংশীদারি ইউটিলিটি শিরোনামে যুক্ত করুন:
@interface UIScrollView (ScrollToBottom)
- (void)scrollToBottomAnimated:(BOOL)animated;
@end
এবং তারপরে সেই ইউটিলিটি বাস্তবায়নের জন্য:
@implementation UIScrollView(ScrollToBottom)
- (void)scrollToBottomAnimated:(BOOL)animated
{
CGPoint bottomOffset = CGPointMake(0, self.contentSize.height - self.bounds.size.height);
[self setContentOffset:bottomOffset animated:animated];
}
@end
তারপরে আপনি যেখানে চান সেখানে এটি প্রয়োগ করুন:
[[myWebView scrollView] scrollToBottomAnimated:YES];
অনুভূমিক স্ক্রোলভিউয়ের জন্য
আপনি যদি আমার পছন্দ করেন তবে আমার একটি অনুভূমিক স্ক্রোলভিউ রয়েছে এবং এর শেষের দিকে স্ক্রোল করতে চান (আমার ক্ষেত্রে এটির ডানদিকে) আপনার গ্রহণযোগ্য উত্তরের কিছু অংশ পরিবর্তন করতে হবে:
উদ্দেশ্য গ
CGPoint rightOffset = CGPointMake(self.scrollView.contentSize.width - self.scrollView.bounds.size.width + self.scrollView.contentInset.right, 0 );
[self.scrollView setContentOffset:rightOffset animated:YES];
দ্রুতগতি
let rightOffset: CGPoint = CGPoint(x: self.scrollView.contentSize.width - self.scrollView.bounds.size.width + self.scrollView.contentInset.right, y: 0)
self.scrollView.setContentOffset(rightOffset, animated: true)
যদি আপনি কোনওভাবে স্ক্রোলভিউ কন্টেন্টসাইজ পরিবর্তন করেন (উদাহরণস্বরূপ স্ক্রোলভিউয়ের অভ্যন্তরে স্ট্যাকভিউতে কিছু যুক্ত করুন) আপনাকে অবশ্যই কল করতে হবেscrollView.layoutIfNeeded()
স্ক্রোলিংয়ের আগে , অন্যথায় এটি কিছুই করে না।
উদাহরণ:
scrollView.layoutIfNeeded()
let bottomOffset = CGPoint(x: 0, y: scrollView.contentSize.height - scrollView.bounds.size.height + scrollView.contentInset.bottom)
if(bottomOffset.y > 0) {
scrollView.setContentOffset(bottomOffset, animated: true)
}
আপনার সামগ্রীর নীচের অংশটি দৃশ্যমান তা নিশ্চিত করার একটি ভাল উপায় হ'ল সূত্রটি ব্যবহার করা:
contentOffsetY = MIN(0, contentHeight - boundsHeight)
এটি নিশ্চিত করে যে আপনার সামগ্রীর নীচের প্রান্তটি সর্বদা দেখার নীচের প্রান্তে বা তার উপরে থাকবে। MIN(0, ...)
প্রয়োজন বোধ করা হয় কারণ UITableView
(এবং সম্ভবত UIScrollView
) নিশ্চিত contentOffsetY >= 0
তখন ব্যবহারকারী চেষ্টা দৃশ্যত snapping দ্বারা স্ক্রোল করতেcontentOffsetY = 0
। এটি ব্যবহারকারীর কাছে বেশ অদ্ভুত দেখাচ্ছে।
এটি বাস্তবায়নের কোডটি হ'ল:
UIScrollView scrollView = ...;
CGSize contentSize = scrollView.contentSize;
CGSize boundsSize = scrollView.bounds.size;
if (contentSize.height > boundsSize.height)
{
CGPoint contentOffset = scrollView.contentOffset;
contentOffset.y = contentSize.height - boundsSize.height;
[scrollView setContentOffset:contentOffset animated:YES];
}
আপনার যদি অ্যানিমেশনের প্রয়োজন না হয় তবে এটি কাজ করে:
[self.scrollView setContentOffset:CGPointMake(0, CGFLOAT_MAX) animated:NO];
Matt
সমাধানটি আমার কাছে সঠিক বলে মনে হলেও আপনার যদি সেট আপ করা থাকে তবে সংগ্রহ ভিউ ইনসেটটিও অ্যাকাউন্টে নেওয়া দরকার।
অভিযোজিত কোডটি হ'ল:
CGSize csz = sv.contentSize;
CGSize bsz = sv.bounds.size;
NSInteger bottomInset = sv.contentInset.bottom;
if (sv.contentOffset.y + bsz.height + bottomInset > csz.height) {
[sv setContentOffset:CGPointMake(sv.contentOffset.x,
csz.height - bsz.height + bottomInset)
animated:YES];
}
কোনও টেবিলের শেষ আইটেমে স্ক্রোল করার সমাধান দেখুন:
সুইফট 3:
if self.items.count > 0 {
self.tableView.scrollToRow(at: IndexPath.init(row: self.items.count - 1, section: 0), at: UITableViewScrollPosition.bottom, animated: true)
}
আমার জন্য কাজ না করে, যখন আমি এটি ব্যবহার করার চেষ্টা UITableViewController
উপর self.tableView
(iOS 4.1)
, যোগ করার পরেfooterView
। এটি কালো স্ক্রিন দেখিয়ে সীমানার বাইরে স্ক্রোল করে।
বিকল্প সমাধান:
CGFloat height = self.tableView.contentSize.height;
[self.tableView setTableFooterView: myFooterView];
[self.tableView reloadData];
CGFloat delta = self.tableView.contentSize.height - height;
CGPoint offset = [self.tableView contentOffset];
offset.y += delta;
[self.tableView setContentOffset: offset animated: YES];
CGFloat yOffset = scrollView.contentOffset.y;
CGFloat height = scrollView.frame.size.height;
CGFloat contentHeight = scrollView.contentSize.height;
CGFloat distance = (contentHeight - height) - yOffset;
if(distance < 0)
{
return ;
}
CGPoint offset = scrollView.contentOffset;
offset.y += distance;
[scrollView setContentOffset:offset animated:YES];
আমি খুঁজে পেয়েছি যে contentSize
পাঠ্যের প্রকৃত আকারটি সত্যিই প্রতিফলিত করে না, তাই নীচে স্ক্রোল করার চেষ্টা করার সময় এটি কিছুটা বন্ধ হয়ে যাবে। আসল সামগ্রীর আকার নির্ধারণের সেরা উপায়টি আসলে NSLayoutManager
এর usedRectForTextContainer:
পদ্ধতিটি ব্যবহার করা :
UITextView *textView;
CGSize textSize = [textView.layoutManager usedRectForTextContainer:textView.textContainer].size;
প্রকৃতপক্ষে কতটা পাঠ্য দেখানো হয়েছে তা নির্ধারণ UITextView
করতে, আপনি ফ্রেমের উচ্চতা থেকে পাঠ্য ধারক ইনসেটগুলি বিয়োগ করে এটি গণনা করতে পারেন।
UITextView *textView;
UIEdgeInsets textInsets = textView.textContainerInset;
CGFloat textViewHeight = textView.frame.size.height - textInsets.top - textInsets.bottom;
তারপরে স্ক্রোল করা সহজ হয়ে যায়:
// if you want scroll animation, use contentOffset
UITextView *textView;
textView.contentOffset = CGPointMake(textView.contentOffset.x, textSize - textViewHeight);
// if you don't want scroll animation
CGRect scrollBounds = textView.bounds;
scrollBounds.origin = CGPointMake(textView.contentOffset.x, textSize - textViewHeight);
textView.bounds = scrollBounds;
বিভিন্ন আকারগুলি খালি জন্য কী উপস্থাপন করে সে বিষয়ে রেফারেন্সের জন্য কয়েকটি সংখ্যা UITextView
।
textView.frame.size = (width=246, height=50)
textSize = (width=10, height=16.701999999999998)
textView.contentSize = (width=246, height=33)
textView.textContainerInset = (top=8, left=0, bottom=8, right=0)
স্ক্রোলটোবোটম পদ্ধতি যুক্ত করতে ইউআইএসক্রোলভিউ প্রসারিত করুন:
extension UIScrollView {
func scrollToBottom(animated:Bool) {
let offset = self.contentSize.height - self.visibleSize.height
if offset > self.contentOffset.y {
self.setContentOffset(CGPoint(x: 0, y: offset), animated: animated)
}
}
}
UICollectionView
অনুলিপি এবং আটকানোতে স্বাচ্ছন্দ্যের জন্য গৃহীত উত্তরের Xamarin.iOS সংস্করণ
var bottomOffset = new CGPoint (0, CollectionView.ContentSize.Height - CollectionView.Frame.Size.Height + CollectionView.ContentInset.Bottom);
CollectionView.SetContentOffset (bottomOffset, false);