ভিউটি উপস্থিত হওয়ার আগে আইফোনটিতে কোনও ইউআইটিএবলভিউয়ের নীচে কীভাবে স্ক্রোল করবেন


136

আমার এমন একটি রয়েছে UITableViewযা ভেরিয়েবল উচ্চতার কক্ষগুলির সাথে জনবহুল। আমি দেখতে চাইছি যে টেবিলটি নীচে স্ক্রোল করা হবে যখন ভিউটি দৃশ্যে .োকানো হবে।

আমি বর্তমানে নিম্নলিখিত ফাংশন আছে

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:[log count]-1 inSection:0];
[self.table scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionBottom animated:NO];

লগ হ'ল একটি পরিবর্তনীয় অ্যারে যা প্রতিটি ঘরের সামগ্রী তৈরি করে objects

উপরের কোডটি ঠিকঠাকভাবে কাজ করে viewDidAppearতবে এই দৃশ্যটি প্রথমে প্রদর্শিত হবে এবং তারপরে নীচে ঝাঁপিয়ে পড়লে টেবিলের শীর্ষটি প্রদর্শন করার দুর্ভাগ্যজনক পার্শ্ব প্রতিক্রিয়া রয়েছে। আমি এটি পছন্দ করব যদি table viewএটি উপস্থিত হওয়ার আগে নীচে স্ক্রোল করা যায়।

আমি স্ক্রল চেষ্টা মধ্যে viewWillAppearএবং viewDidLoadকিন্তু উভয় ক্ষেত্রেই ডেটা টেবিলের মধ্যে লোড করা হয়েছে এখনো এবং উভয় একটি ব্যতিক্রম নিক্ষেপ করা।

যেকোন গাইডেন্স অনেক প্রশংসিত হবে, এমনকি যদি আমার কাছে যা আছে তা কেবল সম্ভব যা আমাকে জানায়।

উত্তর:


148

আমি বিশ্বাস করি যে এই আহ্বান

 tableView.setContentOffset(CGPoint(x: 0, y: CGFloat.greatestFiniteMagnitude), animated: false)

আপনি যা চান তা করবে


14
এটা নিখুঁত ধন্যবাদ আমি পর্যাপ্ত উচ্চ ওয়াই মান সহ একটি সিজিপিয়েন্ট তৈরি করেছি যা এটি সর্বদা নীচে প্রদর্শিত হবে। একই পদ্ধতি সঙ্গে নীচে সরানো - (self.table.frame.size.height self.table.contentSize.height) একবার দৃশ্য লোড হওয়ার আমি ব্যবহার করতে পারেন
acqu13sce

8
যদিও এটি নিখুঁত উত্তর, যেমন আমাদের কতগুলি ঘর, টেবিলভিউয়ের উচ্চতা ইত্যাদির জন্য গণনা করার দরকার নেই .. তবে আমি উল্লেখ করব যে টেবিলভিউটি পুনরায় লোড করার আগে আমাদের এটি কল করা দরকার ... আমরা যদি এটি কাজ করি না তবে এটি পরে লিখুন[table reloadData];
ফাহিম পার্কার


2
বা শুধু স্ক্রোল CGPoint(x: 0, y: tableView.contentSize.height)?
আম্বার কে

5
বাবা !!! টেবিলটি অদৃশ্য করে তোলে: -ও। সেরা ব্যবহার করে [স্ব। টেবিল স্ক্রোলটরোআউটআইডেক্সপথ: সূচকপথ এ এসক্রলপোস্টেশন: ইউআইটিবেলভিউস্ক্রোলপজিশন নীচে অ্যানিমেটেড: কোন];
কার্ল হাইন

122

আমি মনে করি সবচেয়ে সহজ উপায় এটি:

if (self.messages.count > 0)
{
    [self.tableView 
        scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:self.messages.count-1 
        inSection:0] 
        atScrollPosition:UITableViewScrollPositionBottom animated:YES];
}

সুইফট 3 সংস্করণ:

if messages.count > 0 {
    userDefinedOptionsTableView.scrollToRow(at: IndexPath(item:messages.count-1, section: 0), at: .bottom, animated: true)
}

3
সেলটি ইউআইটিবেবল ভিউয়ের চেয়ে লম্বা হলে এটি কাজ করে না
ওলাভ গাউসেকার

3
সেলটি ইউআইটিএবলভিউয়ের চেয়ে লম্বা? এরকম ব্যবহারের মামলা কখনও শুনেনি।
চামিরা ফার্নান্দো

@ চামিরা ফার্নান্দো এটিই সহজতম উপায় :)
এআইটিএলআই_এডিডিআরহাহমানে

মনে রাখবেন যে messages.countইতিমধ্যে বাস্তবায়িত দ্বারা এটি প্রতিস্থাপনের অর্থ হতে পারে myTableView.dataSource!.tableView(myTableView, numberOfRowsInSection: 0)। হ্যাঁ এটি দীর্ঘ, তবে এটি কোড পুনরাবৃত্তি এড়াতে পারে। আপনাকে handleচ্ছিক হ্যান্ডেলও করতে হবে dataSource(এই নমুনাটির মতো আন-মোড়কে জোর করবেন না)।
নিকোলে সুভান্দজিয়েভ

@ চামিরা ফার্নান্দো আমি জানি এই প্রশ্নটি পুরানো, তবে আপনি কখনও দেখেন নি, এর অর্থ এই নয় যে এটি ঘটে না। আপনার প্রশ্নের উত্তর দেওয়ার জন্য, ফোর্সকয়ারের মতো অ্যাপ্লিকেশনগুলির মধ্যে এই পরিস্থিতি থাকতে পারে, যেখানে ব্যবহারকারী একটি পর্যালোচনা লেখেন। ঘরের উচ্চতা টেবিলভিউয়ের উচ্চতার চেয়ে দুর্দান্ত। এটি পুরোপুরি সূক্ষ্ম পরিস্থিতি।
Caio

121

থেকে ইয়াকুবের উত্তর , এই কোড হল:

- (void) viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];

    if (self.messagesTableView.contentSize.height > self.messagesTableView.frame.size.height) 
    {
        CGPoint offset = CGPointMake(0, self.messagesTableView.contentSize.height - self.messagesTableView.frame.size.height);
        [self.messagesTableView setContentOffset:offset animated:YES];
    }
}

আইওএস 11 এ আপনার অ্যাডজাস্টেড টেবিল ভিউ ফ্রেমের উচ্চতা ব্যবহার করা উচিত:UIEdgeInsetsInsetRect(self.messagesTableView.frame, self.messagesTableView.safeAreaInsets).height
স্লাভ

41

আপনার যদি সামগ্রীর একেবারে শেষের দিকে স্ক্রোল করতে হয় তবে আপনি এটি এটি করতে পারেন:

- (void)scrollToBottom
{
    CGFloat yOffset = 0;

    if (self.tableView.contentSize.height > self.tableView.bounds.size.height) {
        yOffset = self.tableView.contentSize.height - self.tableView.bounds.size.height;
    }

    [self.tableView setContentOffset:CGPointMake(0, yOffset) animated:NO];
}

7
অটোলেআউট নিয়ে কাজ করে, তবে ভিউডিড লেআউটসউভভিউগুলি থেকে এই পদ্ধতিটি কল করা গুরুত্বপূর্ণ
ওমাটি

আমাদের দয়া করে কেন এটি করতে হবে তা দয়া করে ব্যাখ্যা করতে পারেন yOffset = self.tableView.contentSize.height - self.tableView.bounds.size.height; :? ধন্যবাদ।
আনহিলিগ

3
@ আনহেলিগ আপনি যদি self.tableView.contentSize.heightটেবিলের সামগ্রীটিতে স্ক্রোল করেন তবে দৃশ্যমান নাও থাকতে পারে, কারণ আপনি সামগ্রীর নীচে স্ক্রোল করে যাচ্ছেন । অতএব আপনাকে টেবিল দৃশ্যের শেষের উপরে একটি "দৃশ্যমান টেবিল ভিউ ফাঁক" এ স্ক্রোল করতে হবে।
হান্স ওয়ান

31

আমি অটোলেআউট ব্যবহার করছি এবং কোনও উত্তরই আমার পক্ষে কার্যকর হয়নি। এখানে আমার সমাধান যা শেষ পর্যন্ত কাজ করেছে:

@property (nonatomic, assign) BOOL shouldScrollToLastRow;


- (void)viewDidLoad {
    [super viewDidLoad];

    _shouldScrollToLastRow = YES;
}


- (void)viewDidLayoutSubviews {
    [super viewDidLayoutSubviews];

    // Scroll table view to the last row
    if (_shouldScrollToLastRow)
    {
        _shouldScrollToLastRow = NO;
        [self.tableView setContentOffset:CGPointMake(0, CGFLOAT_MAX)];
    }
}

1
এটি প্রায় আমার জন্য কাজ করে তবে আমার টেবিলের ডেটা বাহ্যিক এপিআই থেকে লোড হচ্ছে এমন সময় আমি একটি অদ্ভুত গ্রাফিকাল গ্ল্যাচ পাই। আমার ক্ষেত্রে setContentOffsetডেটা আনার সময় এবং টেবিলভিউটি পুনরায় লোড করার সময় আমাকে অন্য কোনও পয়েন্টে কল করার দরকার নেই ?
jmoz

আপনার অনুরোধের সম্পূর্ণ হ্যান্ডলারে অফসেটটি সেট করার চেষ্টা করুন।
রাফএল

2
এটি
আইওএস

2
প্রাথমিক সামগ্রী অফসেট সেট করার সময় CGFLOAT_MAXআমি ব্যবহার না করে ব্যবহার করেছি contentSize.height - frame.height + contentInset.bottom। ব্যবহার করে আমার CGFLOAT_MAXমনে জগাখিচুড়ি হয়েছে।
বাজা207

23

@JacobRelkin দ্বারা গৃহীত সমাধান আইওএস 7.0 আমার জন্য কাজ না করে অটো লেআউট ব্যবহার করে।

আমার একটি কাস্টম সাবক্লাস রয়েছে UIViewControllerএবং এর _tableViewএকটি সংক্ষিপ্তসার হিসাবে একটি উদাহরণ ভেরিয়েবল যুক্ত করেছি view। আমি অবস্থান_tableView অটো লেআউট ব্যবহার করে । আমি এই পদ্ধতিটি কল করার চেষ্টা করেছি viewDidLoadএমনকি শেষেওviewWillAppear: । কেউই কাজ করেনি।

সুতরাং, আমি আমার কাস্টম সাবক্লাসে নিম্নলিখিত পদ্ধতিটি যুক্ত করেছি UIViewController

- (void)tableViewScrollToBottomAnimated:(BOOL)animated {
    NSInteger numberOfRows = [_tableView numberOfRowsInSection:0];
    if (numberOfRows) {
        [_tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:numberOfRows-1 inSection:0] atScrollPosition:UITableViewScrollPositionBottom animated:animated];
    }
}

কাজের [self tableViewScrollToBottomAnimated:NO]শেষে ডাকা হচ্ছে viewDidLoad। দুর্ভাগ্যক্রমে, এটি tableView:heightForRowAtIndexPath:প্রতিটি ঘরের জন্য তিনবার কল করার কারণও হয়।


23

এখানে একটি এক্সটেনশান যা আমি সুইফট ২.০ এ প্রয়োগ করেছি। tableviewলোড হওয়ার পরে এই ফাংশনগুলি কল করা উচিত :

import UIKit

extension UITableView {
    func setOffsetToBottom(animated: Bool) {
        self.setContentOffset(CGPointMake(0, self.contentSize.height - self.frame.size.height), animated: true)
    }

    func scrollToLastRow(animated: Bool) {
        if self.numberOfRowsInSection(0) > 0 {
            self.scrollToRowAtIndexPath(NSIndexPath(forRow: self.numberOfRowsInSection(0) - 1, inSection: 0), atScrollPosition: .Bottom, animated: animated)
        }
    }
}

3
এটি সামগ্রীর আকার ব্যবহার করার চেয়ে ভাল। সুইফট 3 এর জন্য। যদি self.numberOfRows (ইনসেকশন: 0)> 0 {self.scrolToRow (at: IndexPath.init (সারি: self.numberOfRows (ইনসেকশন: 0) -1, বিভাগ: 0), এ:। নীচে, অ্যানিমেটেড: অ্যানিমেটেড)
সোহওয়ান পার্ক

যদি স্ক্রোলটোস্টাআরও এই পদ্ধতিটি নিখুঁতভাবে কাজ করে না তবে কেবল স্ব.লয়আউটআইফনেড () যুক্ত করুন এবং এটি কাজটি নিখুঁত !!
যোগেশ প্যাটেল

16

বিস্তারিত

  • এক্সকোড 8.3.2, সুইফ্ট 3.1
  • এক্সকোড 10.2 (10E125), সুইফট 5

কোড

import UIKit

extension UITableView {
    func scrollToBottom(animated: Bool) {
        let y = contentSize.height - frame.size.height
        if y < 0 { return }
        setContentOffset(CGPoint(x: 0, y: y), animated: animated)
    }
}

ব্যবহার

tableView.scrollToBottom(animated: true)

সম্পূর্ণ নমুনা

সমাধান কোড পেস্ট করতে ভুলবেন না!

import UIKit

class ViewController: UIViewController {

    private weak var tableView: UITableView?
    private lazy var cellReuseIdentifier = "CellReuseIdentifier"

    override func viewDidLoad() {
        super.viewDidLoad()
        let tableView = UITableView(frame: view.frame)
        view.addSubview(tableView)
        tableView.register(UITableViewCell.self, forCellReuseIdentifier: cellReuseIdentifier)
        self.tableView = tableView
        tableView.dataSource = self
        tableView.performBatchUpdates(nil) { [weak self] result in
            if result { self?.tableView?.scrollToBottom(animated: true) }
        }
    }
}

extension ViewController: UITableViewDataSource {

    func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 100
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: cellReuseIdentifier, for: indexPath )
        cell.textLabel?.text = "\(indexPath)"
        return cell
    }
}

15

এটি দ্রুত করার জন্য একটি "সুইফ্টার" উপায়টি হ'ল:

var lastIndex = NSIndexPath(forRow: self.messages.count - 1, inSection: 0)
self.messageTableView.scrollToRowAtIndexPath(lastIndex, atScrollPosition: UITableViewScrollPosition.Bottom, animated: true)

আমার জন্য পারফেক্ট।


9

আমি ফ্রেমটিতে প্রদর্শিত টেবিলের শেষের সাথে টেবিলটি লোড করতে চেয়েছিলাম। আমি ব্যবহার পেয়েছি

NSIndexPath *scrollIndexPath = [NSIndexPath indexPathForRow:([self.tableView numberOfRowsInSection:0] - 1) inSection:0];
[[self tableView] scrollToRowAtIndexPath:scrollIndexPath atScrollPosition:UITableViewScrollPositionBottom animated:NO];

টেবিলের উচ্চতা ফ্রেমের উচ্চতার চেয়ে কম হলে এটি একটি ত্রুটি দেয় কারণ এটি কাজ করে না। নোট করুন আমার টেবিলটিতে কেবল একটি বিভাগ রয়েছে।

আমার জন্য যে সমাধানটি কাজ করেছিল তা হ'ল উইলঅ্যাপিয়ারে নিম্নলিখিত কোডটি বাস্তবায়ন করেছিল:

- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
// on the initial cell load scroll to the last row (ie the latest Note)
if (initialLoad==TRUE) {
    initialLoad=FALSE; 
    NSIndexPath *scrollIndexPath = [NSIndexPath indexPathForRow:([self.tableView numberOfRowsInSection:0] - 1) inSection:0];
    [[self tableView] scrollToRowAtIndexPath:scrollIndexPath atScrollPosition:UITableViewScrollPositionBottom animated:NO];
        CGPoint offset = CGPointMake(0, (1000000.0));
        [self.tableView setContentOffset:offset animated:NO];
    }
}

BOOL আইভর ইনিশিয়াললোডটি ভিডডিডলয়েডে সত্যে সেট করা আছে।


আপনার কি scrollToRowAtIndexPathআদৌ ফোন করার দরকার আছে ? আপনি ইতিমধ্যে setContentOffsetএরপরে কল করছেন , এটি সম্ভবত প্রথম কলটি অর্থহীন করে তুলতে পারে।
কার্লোস পি

9

সুইফ্টের জন্য:

if tableView.contentSize.height > tableView.frame.size.height {
    let offset = CGPoint(x: 0, y: tableView.contentSize.height - tableView.frame.size.height)
    tableView.setContentOffset(offset, animated: false)
}


5

সুইফ্ট 3 (এক্সকোড 8.1) এর জন্য:

override func viewDidAppear(_ animated: Bool) {
    let numberOfSections = self.tableView.numberOfSections
    let numberOfRows = self.tableView.numberOfRows(inSection: numberOfSections-1)

    let indexPath = IndexPath(row: numberOfRows-1 , section: numberOfSections-1)
    self.tableView.scrollToRow(at: indexPath, at: UITableViewScrollPosition.middle, animated: true)
}

3
এটি ওপি প্রশ্নের উত্তর দেয় না, শুরু থেকেই এটিই কাজ করছিল। এছাড়াও আপনার কল করা উচিত সুপার.ভিউ
ডেড

4

অবশ্যই একটি বাগ। সম্ভবত আপনার কোডটিতে আপনি যে কোনও জায়গা ব্যবহার করেন table.estimatedRowHeight = value(উদাহরণস্বরূপ 100)। এই মানটি সর্বাধিক মান দ্বারা প্রতিস্থাপন করুন যা আপনি মনে করেন যে একটি সারির উচ্চতা পেতে পারে , উদাহরণস্বরূপ 500 .. এটি নিম্নলিখিত কোডের সাথে একত্রে সমস্যাটি সমাধান করা উচিত:

//auto scroll down example
let delay = 0.1 * Double(NSEC_PER_SEC)
let time = dispatch_time(DISPATCH_TIME_NOW, Int64(delay))

dispatch_after(time, dispatch_get_main_queue(), {
    self.table.scrollToRowAtIndexPath(NSIndexPath(forRow: self.Messages.count - 1, inSection: 0), atScrollPosition: UITableViewScrollPosition.Bottom, animated: false)
})

4

অনেক বিড়বিড় করার পরে এটি আমার পক্ষে কাজ করেছে:

var viewHasAppeared = false

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    if !viewHasAppeared { goToBottom() }
}

override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(animated)
    viewHasAppeared = true
}

private func goToBottom() {
    guard data.count > 0 else { return }
    let indexPath = NSIndexPath(forRow: data.count - 1, inSection: 0)
    tableView.scrollToRowAtIndexPath(indexPath, atScrollPosition: .Bottom, animated: false)
    tableView.layoutIfNeeded()
}

কিছুটি পরামর্শ হিসাবে চাবিটি ভিতরে মোড়ানো না হয়ে দেখা গেল, তবে কেবল একটি কল দিয়ে এটি অনুসরণ করেছেscrollToRowAtIndexPathdispatch_asynclayoutIfNeeded

আমার এই বিষয়টি বোঝার জন্য হ'ল বর্তমান থ্রেডে স্ক্রোল পদ্ধতিটি কল করা গ্যারান্টি দেয় যে দৃশ্যটি প্রদর্শিত হওয়ার আগে স্ক্রোল অফসেটটি অবিলম্বে সেট করা আছে । যখন আমি মূল থ্রেডে প্রেরণ করছিলাম তখন স্ক্রোলটি কার্যকর হওয়ার আগে দৃশ্যটি তাত্ক্ষণিকভাবে প্রদর্শিত হবে।

(এছাড়াও বিশেষ দ্রষ্টব্য আপনি প্রয়োজন viewHasAppearedপতাকা কারণ আপনার চাই না goToBottomপ্রত্যেক সময় viewDidLayoutSubviewsবলা হয়। এটা উদাহরণস্বরূপ যখনই অভিযোজন পরিবর্তনের জন্য বলা হয়।)


3

উপরের সমাধানগুলি ব্যবহার করে, এটি আপনার টেবিলের নীচে স্ক্রোল করবে (কেবল যদি টেবিলের সামগ্রী প্রথমে লোড হয়):

//Scroll to bottom of table
CGSize tableSize = myTableView.contentSize;
[myTableView setContentOffset:CGPointMake(0, tableSize.height)];


2

যদি আপনাকে স্ক্রোল করার আগে অ্যাসিঙ্ক্রোনালি ডেটা লোড করতে হয় তবে সম্ভাব্য সমাধানটি এখানে:

tableView.alpha = 0 // We want animation!
lastMessageShown = false // This is ivar

viewModel.fetch { [unowned self] result in
    self.tableView.reloadData()

    if !self.lastMessageShown {
        dispatch_async(dispatch_get_main_queue()) { [unowned self] in
            if self.rowCount > 0 {
                self.tableView.scrollToRowAtIndexPath(NSIndexPath(forRow: self.rowCount, inSection: 0), atScrollPosition: .Bottom, animated: false)
            }

            UIView.animateWithDuration(0.1) {
                self.tableView.alpha = 1
                self.lastMessageShown = true // Do it once
            }
        }
    }
}

2

তলদেশে সুইফ্ট 3 তে স্ক্রোল করুন

 override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(false)
        //scroll down
        if lists.count > 2 {
            let numberOfSections = self.tableView.numberOfSections
            let numberOfRows = self.tableView.numberOfRows(inSection: numberOfSections-1)
            let indexPath = IndexPath(row: numberOfRows-1 , section: numberOfSections-1)
            self.tableView.scrollToRow(at: indexPath, at: UITableViewScrollPosition.middle, animated: true)
        }
    }

2
func scrollToBottom() {

    let sections = self.chatTableView.numberOfSections

    if sections > 0 {

        let rows = self.chatTableView.numberOfRows(inSection: sections - 1)

        let last = IndexPath(row: rows - 1, section: sections - 1)

        DispatchQueue.main.async {

            self.chatTableView.scrollToRow(at: last, at: .bottom, animated: false)
        }
    }
}

আপনি যোগ করা উচিত

DispatchQueue.main.async {
            self.chatTableView.scrollToRow(at: last, at: .bottom, animated: false)
        }

অথবা এটি নীচে স্ক্রোল করা হবে না।


2

টেবিলভিউ নীচে স্ক্রোল করতে এই সাধারণ কোডটি ব্যবহার করুন

NSInteger rows = [tableName numberOfRowsInSection:0];
if(rows > 0) {
    [tableName scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:rows-1 inSection:0]
                     atScrollPosition:UITableViewScrollPositionBottom
                             animated:YES];
}

1
এটি ইতিমধ্যে ওপি বলেছে যে তিনি ইতিমধ্যে চেষ্টা করেছিলেন। এই উত্তরটি ভিউউইল অ্যাপয়ারে কীভাবে এটি সঠিকভাবে কাজ করতে পারে সে বিষয়ে ওপি-র প্রশ্নের সমাধান করে না।
jk7

2

উত্তরের জন্য জ্যাকব ধন্যবাদ। একচেটিয়া সি # সংস্করণে আকর্ষণীয় কেউ হলে সত্যিই সহায়ক ull

private void SetScrollPositionDown() {
    if (tblShoppingListItem.ContentSize.Height > tblShoppingListItem.Frame.Size.Height) {
        PointF offset = new PointF(0, tblShoppingListItem.ContentSize.Height - tblShoppingListItem.Frame.Size.Height);
        tblShoppingListItem.SetContentOffset(offset,true );
    }
}

1

আইওএস-এ এটি আমার পক্ষে ভাল কাজ করেছে

CGFloat height = self.inputTableView.contentSize.height;
if (height > CGRectGetHeight(self.inputTableView.frame)) {
    height -= (CGRectGetHeight(self.inputTableView.frame) - CGRectGetHeight(self.navigationController.navigationBar.frame));
}
else {
    height = 0;
}
[self.inputTableView setContentOffset:CGPointMake(0, height) animated:animated];

এটি থেকে কল করা প্রয়োজন viewDidLayoutSubviews


1

[সেল্ফ.ট্যাবলভিউইনফোর স্ক্রোলটেকটভিজিবল: সিজিআরেক্টমেক (0, সেলফি টেবিলভিউআইফোন.কম, স্ব। টেবিলভিউআইএনফো.উইথ, সেল্ফ.ট্যাবলভিউআইনফাইট.ইইচটি) অ্যানিমেটেড:


1

গৃহীত উত্তরটি আমার টেবিলের সাথে কাজ করে না (হাজার হাজার সারি, গতিশীল লোডিং) তবে নীচের কোডটি কাজ করে:

- (void)scrollToBottom:(id)sender {
    if ([self.sections count] > 0) {
        NSInteger idx = [self.sections count] - 1;
        CGRect sectionRect = [self.tableView rectForSection:idx];
        sectionRect.size.height = self.tableView.frame.size.height;
        [self.tableView scrollRectToVisible:sectionRect animated:NO];
    }
}

1

এই কোড ব্যবহার করে আপনি এটি করতে পারেন এমন কোনও স্ক্রোলিংয়ের দরকার নেই:

[YOURTABLEVIEWNAME setContentOffset:CGPointMake(0, CGFLOAT_MAX)];

1

আপনি যদি প্রোগ্রামটিমে টেবিলভিউয়ের জন্য ফ্রেম সেট আপ করে থাকেন তবে নিশ্চিত হয়ে নিন যে আপনি ফ্রেমটি সঠিকভাবে সেট করছেন।


0

সুইফটে, আপনার কেবল দরকার

self.tableView.scrollToNearestSelectedRowAtScrollPosition(UITableViewScrollPosition.Bottom, animated: true)

এটি স্বয়ংক্রিয়ভাবে বোতামে স্ক্রোল করতে


0

সুইফট ৩.০ এ আপনি যদি টেবিলভিউয়ের কোনও নির্দিষ্ট ঘর যেতে চান তবে সেল সূচকের মান পরিবর্তন করুন যেমন "স্ব.ইউরআরআর.ক্রাউন্ট" মান পরিবর্তন করুন।

self.yourTable.reloadData()
self.scrollToBottom() 
func scrollToBottom(){
    DispatchQueue.global(qos: .background).async {
        let indexPath = IndexPath(row: self.yourArr.count-1, section: 0)
        self.tblComment.scrollToRow(at: indexPath, at: .bottom, animated: true)
    }
}

0

আমি বিশ্বাস করি পুরানো সমাধানগুলি সুইফট 3 দিয়ে কাজ করে না।

আপনি যদি সারণিতে নম্বর সারিগুলি জানেন তবে আপনি এটি ব্যবহার করতে পারেন:

tableView.scrollToRow(
    at: IndexPath(item: listCountInSection-1, section: sectionCount - 1 ), 
    at: .top, 
    animated: true)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.