আপনি যখন নির্বাচন করা হয় তখন কোনও ইউআইটিএবলভিউসেলটিতে উচ্চতা পরিবর্তন সঞ্চার করতে পারেন?


393

আমি UITableViewআমার আইফোন অ্যাপ্লিকেশনটিতে একটি ব্যবহার করছি এবং আমার সাথে একটি গ্রুপের লোকদের একটি তালিকা রয়েছে। আমি এটি চাই যাতে ব্যবহারকারী কোনও নির্দিষ্ট ব্যক্তির উপর ক্লিক করে (এভাবে ঘর নির্বাচন করে), সেই ব্যক্তির বৈশিষ্ট্যগুলি সম্পাদনা করার জন্য কয়েকটি ইউআই নিয়ন্ত্রণ প্রদর্শন করার জন্য সেলটি উচ্চতায় বৃদ্ধি পায়।

এটা কি সম্ভব?

উত্তর:


879

আমি যেটির UITableViewউপর কাজ করছিলাম তার পার্শ্ব-প্রতিক্রিয়া হিসাবে এটির একটি সত্যিকারের সহজ সমাধানটি আমি পেয়েছি .....

ঘরের উচ্চতা এমন একটি ভেরিয়েবলে সঞ্চয় করুন যা মূল উচ্চতার প্রতিপাদ্য মাধ্যমে সাধারণত প্রতিবেদন করে tableView: heightForRowAtIndexPath:, তারপরে আপনি যখন উচ্চতা পরিবর্তন সঞ্চার করতে চান, কেবল ভেরিয়েবলের মান পরিবর্তন করুন এবং এটিকে কল করুন ...

[tableView beginUpdates];
[tableView endUpdates];

আপনি এটি একটি সম্পূর্ণ পুনরায় লোড না করে দেখতে পাবেন UITableViewতবে কোষগুলির জন্য নতুন উচ্চতার মানটি ধরে নিয়ে সেগুলি পুনরায় আঁকতে হবে তা জানার পক্ষে যথেষ্ট .... এবং অনুমান কী? এটি আপনার জন্য পরিবর্তনকে প্রাণবন্ত করে তোলে। মিষ্টি।

আমার ব্লগে আমার আরও বিশদ বিবরণ এবং পূর্ণ কোডের নমুনা রয়েছে ... ইউআইটিএবলভিউ সেল উচ্চতা পরিবর্তন অ্যানিমেট করুন


6
ইহা অসাধারণ. তবে কি কোনও উপায় আছে যে আমরা টেবিলের অ্যানিমেশন গতি নিয়ন্ত্রণ করতে পারি?
জোশ কাহানে

7
এটি কাজ করে তবে আমি যদি একটি ঘর আরও বড় করি তবে এটি 44 থেকে 74 পর্যন্ত বলা যাক এবং তারপরে আবার ছোট করে 44 এ বিভাজক লাইনটি সম্পূর্ণ অদ্ভুত আচরণ করে। কেউ কি এটি নিশ্চিত করতে পারেন?
প্ল্যাটজচেন

46
এটি একটি উদ্ভট সমাধান, তবে এটি অ্যাপল ডাব্লুডাব্লুডিসি 2010 "মাস্টারিং টেবিল ভিউ" সেশনেও সুপারিশ করেছিল। আমি এটি ডকুমেন্টেশনে যুক্ত করার জন্য একটি বাগ রিপোর্ট ফাইল করতে যাচ্ছি কারণ আমি প্রায় 2 ঘন্টা গবেষণা চালিয়েছি।
বিপাপা

5
আমি এই সমাধানটি চেষ্টা করেছি এবং এটি কেবল কখনও কখনও তখনই কাজ করে, যখন আপনি কোনও সেল টিপেন তখন কাজ করার সম্ভাবনা 50% থাকে। কারও কি একই বাগ আছে? এটি কারণ iOS7?
জোয়ান কার্ডোনা

7
এখন এটি অফিসিয়াল ডকুমেন্টেশনেও লেখা আছে: You can also use this method followed by the endUpdates method to animate the change in the row heights without reloading the cell. developer.apple.com/library/ios/docamentation/UIKit/References/…
জারোস্লাভ

63

আমি সাইমন লি এর উত্তর পছন্দ করি। আমি আসলে সেই পদ্ধতিটি চেষ্টা করি নি তবে মনে হচ্ছে এটি তালিকার সমস্ত কক্ষের আকার পরিবর্তন করবে। আমি কেবলমাত্র সেই কক্ষটি পরিবর্তিত হওয়ার জন্য আশা করছিলাম যা টেপযুক্ত। আমি সাইমনকে পছন্দ করেছিলাম তবে কিছুটা পার্থক্য নিয়ে। এটি যখন কোনও ঘর নির্বাচন করা হবে তখন এর চেহারা পরিবর্তন করবে। এবং এটি প্রাণবন্ত করে তোলে does এটি করার আরও একটি উপায়।

বর্তমান নির্বাচিত ঘর সূচকটির জন্য একটি মান ধরে রাখতে একটি int তৈরি করুন:

int currentSelection;

তারপর:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    int row = [indexPath row];
    selectedNumber = row;
    [tableView beginUpdates];
    [tableView endUpdates];
}

তারপর:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {

    if ([indexPath row] == currentSelection) {
        return  80;
    }
    else return 40;


}

আমি নিশ্চিত যে আপনি টেবিলভিউতে একই পরিবর্তন করতে পারবেন: সেলফরআরএটআইএনডেক্সপথ: ঘরের প্রকার পরিবর্তন করতে বা এমনকি সেলটির জন্য একটি এক্সিব ফাইল ফাইল লোড করতে।

এর মতো, বর্তমান নির্বাচনটি 0 এ শুরু হবে আপনি যদি তালিকার প্রথম কক্ষটি (সূচীতে 0) ​​ডিফল্টরূপে নির্বাচিত দেখতে না চান তবে আপনাকে সামঞ্জস্য করতে হবে।


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

8
"আমি আসলে সেই পদ্ধতিটি চেষ্টা করে দেখিনি তবে মনে হচ্ছে এটি তালিকার সমস্ত কক্ষের আকার পরিবর্তন করবে" - তবে আপনি খুব শক্ত লাগেন নি।
জ্যামি

13
বর্তমান নির্বাচনটি ইতিমধ্যে টেবিলভিউ.ইনডেপথপ্যাথফোরস্লেটেডরোতে সঞ্চিত।
নিক

22

নির্বাচিত ঘরে নজর রাখতে একটি সম্পত্তি যুক্ত করুন

@property (nonatomic) int currentSelection;

এটি 'প্রারম্ভিক' অবস্থানে শুরু viewDidLoadহয় তা নিশ্চিত করার জন্য (উদাহরণস্বরূপ) একটি প্রেরণক মানটিতে সেট করুনUITableView

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.

    //sentinel
    self.currentSelection = -1;
}

ইন heightForRowAtIndexPathআপনি উচ্চতা সেট করতে পারেন আপনার দ্বারা নির্বাচিত কক্ষের জন্য চান

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
    int rowHeight;
    if ([indexPath row] == self.currentSelection) {
        rowHeight = self.newCellHeight;
    } else rowHeight = 57.0f;
    return rowHeight;
}

ইন didSelectRowAtIndexPathআপনি বর্তমান নির্বাচন এবং সংরক্ষণ একটি গতিশীল উচ্চতা বাঁচাতো ও যদি প্রয়োজন বোধ করা

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
        // do things with your cell here

        // set selection
        self.currentSelection = indexPath.row;
        // save height for full text label
        self.newCellHeight = cell.titleLbl.frame.size.height + cell.descriptionLbl.frame.size.height + 10;

        // animate
        [tableView beginUpdates];
        [tableView endUpdates];
    }
}

ইন didDeselectRowAtIndexPathপ্রহরী মান নির্বাচন সূচক ফিরে সেট এবং স্বাভাবিক ফর্মে সেল ফিরে সজীব

- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath {       
        // do things with your cell here

        // sentinel
        self.currentSelection = -1;

        // animate
        [tableView beginUpdates];
        [tableView endUpdates];
    }
}

আপনাকে ধন্যবাদ, আপনাকে ধন্যবাদ আপনাকে ধন্যবাদ! সেলটি টগল-সক্ষম করতে আমি কিছুটা কোড যুক্ত করেছি। আমি নীচের কোডটি যুক্ত করেছি।
সেপ্টেম্বর

14

পুনরায় ডেটা কোনও ভাল নয় কারণ কোনও অ্যানিমেশন নেই ...

আমি বর্তমানে এটিই চেষ্টা করছি:

NSArray* paths = [NSArray arrayWithObject:[NSIndexPath indexPathForRow:0 inSection:0]];
[self.tableView beginUpdates];
[self.tableView insertRowsAtIndexPaths:paths withRowAnimation:UITableViewRowAnimationFade];
[self.tableView deleteRowsAtIndexPaths:paths withRowAnimation:UITableViewRowAnimationFade];
[self.tableView endUpdates];

এটি প্রায় সঠিকভাবে কাজ করে। প্রায়। আমি ঘরের উচ্চতা বাড়িয়ে দিচ্ছি, এবং মাঝে মাঝে ঘরটি প্রতিস্থাপন করার সাথে সাথে টেবিলের দৃশ্যে কিছুটা "হিক্কার" উপস্থিত হয়, যেন টেবিল দৃশ্যে কিছু স্ক্রোলিং অবস্থান সংরক্ষণ করা হচ্ছে, নতুন ঘরটি (যা প্রথম ঘর টেবিলের মধ্যে) এর অফসেটটি খুব উঁচুতে শেষ হয় এবং স্ক্রোলভিউটি পুনরায় স্থাপনের জন্য বাউন্স করে।


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

11

আমি জানি না ধারাবাহিকভাবে প্রারম্ভিক আপডেটগুলি / শেষ আপডেটগুলি কল করার বিষয়ে এই সমস্ত জিনিস কী, আপনি কেবল ব্যবহার করতে পারেন -[UITableView reloadRowsAtIndexPaths:withAnimation:]এখানে একটি উদাহরণ প্রকল্প


দুর্দান্ত এটি আমার অটো লেআউট সেলটিতে আমার পাঠ্য দর্শনগুলি প্রসারিত করে না। তবে অ্যানিমেশনে এটির ঝাঁকুনি থাকতে হবে কারণ ঘরের আকার আপডেট করার সময় কোনও অ্যানিমেশন বিকল্প চটকদার দেখাচ্ছে।
h3dkandi

10

আমি সমাধান করেছি reloadRowsAtIndexPaths

আমি didSelectRowAtIndexPathনির্বাচিত এবং কলের ইনডেক্সপথে সংরক্ষণ করিreloadRowsAtIndexPaths শেষে করি (আপনি যে উপাদানটি পুনরায় লোড করতে চান তার তালিকার জন্য আপনি এনএসমিটেবলআরে পাঠাতে পারেন)।

ভিতরে heightForRowAtIndexPath আপনি না পরীক্ষা করতে যদি indexPath তালিকায় নয় অথবা expandIndexPath কোষের এবং সেন্ড উচ্চতার না।

আপনি এই মৌলিক উদাহরণটি যাচাই করতে পারেন: https://github.com/ferminhg/iOS-Ees مثالوں/tree/ master / iOS- UITableView-Cell-Hight-Change/ celdascambiadetam এটি একটি সহজ সমাধান।

আমি আপনাকে সহায়তা করলে এক ধরণের কোড যুক্ত করি

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return 20;
}

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath: (NSIndexPath*)indexPath
{
    if ([indexPath isEqual:_expandIndexPath])
        return 80;

    return 40;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"Celda";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    [cell.textLabel setText:@"wopwop"];

    return cell;
}

#pragma mark -
#pragma mark Tableview Delegate Methods

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    NSMutableArray *modifiedRows = [NSMutableArray array];
    // Deselect cell
    [tableView deselectRowAtIndexPath:indexPath animated:TRUE];
    _expandIndexPath = indexPath;
    [modifiedRows addObject:indexPath];

    // This will animate updating the row sizes
    [tableView reloadRowsAtIndexPaths:modifiedRows withRowAnimation:UITableViewRowAnimationAutomatic];
}

8

beginUpdates()/ এর পরিবর্তে endUpdates(), প্রস্তাবিত কলটি এখন:

tableView.performBatchUpdates(nil, completion: nil)

অ্যাপল স্টার্ট আপ / আপডেটস সম্পর্কিত বলেছে: "যখনই সম্ভব সম্ভব এর পরিবর্তে পারফরম্যান্সবাচ আপডেটস (_: সমাপ্তি :) পদ্ধতিটি ব্যবহার করুন।"

দেখুন: https://developer.apple.com/docamentation/uikit/uitableview/1614908-beginupdates


3

সূচীবদ্ধ সারিটি প্রসারণের জন্য এটি চেষ্টা করুন:

@property (nonatomic) NSIndexPath *expandIndexPath;
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath*)indexPath
{
if ([indexPath isEqual:self.expandedIndexPath])
    return 100;

return 44;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSMutableArray *modifiedRows = [NSMutableArray array];
if ([indexPath isEqual:self.expandIndexPath]) {
    [modifiedRows addObject:self.expandIndexPath];
    self.expandIndexPath = nil;
} else {
    if (self.expandedIndexPath)
        [modifiedRows addObject:self.expandIndexPath];

    self.expandIndexPath = indexPath;
    [modifiedRows addObject:indexPath];
}

// This will animate updating the row sizes
[tableView reloadRowsAtIndexPaths:modifiedRows withRowAnimation:UITableViewRowAnimationAutomatic];

// Preserve the deselection animation (if desired)
[tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone];
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ViewControllerCellReuseIdentifier];
    cell.textLabel.text = [NSString stringWithFormat:@"I'm cell %ld:%ld", (long)indexPath.section, (long)indexPath.row];

return cell;
}

3
BOOL flag;

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    flag = !flag;
    [tableView beginUpdates];
    [tableView reloadRowsAtIndexPaths:@[indexPath] 
                     withRowAnimation:UITableViewRowAnimationAutomatic];
    [tableView endUpdates];
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return YES == flag ? 20 : 40;
}

2

আমার মতো কারও জন্য কাস্টম ঘরে "আরও বিশদ" যুক্ত করার জন্য সন্ধান করা একটি নোট।

[tableView beginUpdates];
[tableView endUpdates];

একটি দুর্দান্ত কাজ করেছেন, তবে সেল ভিউ "ক্রপ" করতে ভুলবেন না। ইন্টারফেস বিল্ডার থেকে সম্পত্তি সেল ইন্সপেক্টর থেকে আপনার সেল -> সামগ্রী দেখুন -> নির্বাচন করুন " ক্লিপ সাবভিউ "


2

হিফট 3 এর জন্য সাইমনের উত্তরের একটি সংক্ষিপ্ত সংস্করণ হ'ল এছাড়াও ঘরের নির্বাচনের টগলিংয়ের অনুমতি দেয়

var cellIsSelected: IndexPath?


  func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    cellIsSelected = cellIsSelected == indexPath ? nil : indexPath
    tableView.beginUpdates()
    tableView.endUpdates()
  }


  func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    if cellIsSelected == indexPath {
      return 250
    }
    return 65
  }

2

সুইফট 4 এবং উপরে

আপনার নীচে কোডটি টেবিলভিউয়ের ডাইডলেক্ট সারি প্রতিনিধি পদ্ধতিতে যুক্ত করুন

tableView.beginUpdates()
tableView.setNeedsLayout()
tableView.endUpdates()

1

সাইমন লির উত্তরটির সুইফ্ট সংস্করণ।

// MARK: - Variables 
  var isCcBccSelected = false // To toggle Bcc.



    // MARK: UITableViewDelegate
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {

    // Hide the Bcc Text Field , until CC gets focused in didSelectRowAtIndexPath()
    if self.cellTypes[indexPath.row] == CellType.Bcc {
        if (isCcBccSelected) {
            return 44
        } else {
            return 0
        }
    }

    return 44.0
}

তারপরে ডিডলেস্টরোউএটিআইডেক্সপথ ()

  func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    self.tableView.deselectRowAtIndexPath(indexPath, animated: true)

    // To Get the Focus of CC, so that we can expand Bcc
    if self.cellTypes[indexPath.row] == CellType.Cc {

        if let cell = tableView.cellForRowAtIndexPath(indexPath) as? RecipientTableViewCell {

            if cell.tag == 1 {
                cell.recipientTypeLabel.text = "Cc:"
                cell.recipientTextField.userInteractionEnabled = true
                cell.recipientTextField.becomeFirstResponder()

                isCcBccSelected = true

                tableView.beginUpdates()
                tableView.endUpdates()
            }
        }
    }
}

1

হ্যাঁ এটা সম্ভব.

UITableView একটি প্রতিনিধি পদ্ধতি আছে didSelectRowAtIndexPath

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [UIView animateWithDuration:.6
                          delay:0
         usingSpringWithDamping:UIViewAnimationOptionBeginFromCurrentState
          initialSpringVelocity:0
                        options:UIViewAnimationOptionBeginFromCurrentState animations:^{

                            cellindex = [NSIndexPath indexPathForRow:indexPath.row inSection:indexPath.section];
                            NSArray* indexArray = [NSArray arrayWithObjects:indexPath, nil];
                            [violatedTableView beginUpdates];
                            [violatedTableView reloadRowsAtIndexPaths:indexArray withRowAnimation:UITableViewRowAnimationAutomatic];
                            [violatedTableView endUpdates];
                        }
                     completion:^(BOOL finished) {
    }];
}

তবে আপনার ক্ষেত্রে যদি ব্যবহারকারী স্ক্রল করে এবং একটি আলাদা ঘর নির্বাচন করে তবে আপনার বর্তমান নির্বাচিত সেল reloadRowsAtIndexPaths:কলগুলি সঙ্কুচিত করতে এবং প্রসারিত করতে সর্বশেষ নির্বাচিত সেলটি থাকা দরকার heightForRowAtIndexPath:তাই সেই অনুযায়ী পরিচালনা করুন।


0

এখানে আমার কাস্টম UITableViewসাবক্লাসের কোডটি রয়েছে , যা UITextViewপুনরায় লোড না করে (এবং হারিয়ে যাওয়া কীবোর্ড ফোকাস) ছাড়াই টেবিলের ঘরে প্রসারিত হয়:

- (void)textViewDidChange:(UITextView *)textView {
    CGFloat textHeight = [textView sizeThatFits:CGSizeMake(self.width, MAXFLOAT)].height;
    // Check, if text height changed
    if (self.previousTextHeight != textHeight && self.previousTextHeight > 0) {
        [self beginUpdates];

        // Calculate difference in height
        CGFloat difference = textHeight - self.previousTextHeight;

        // Update currently editing cell's height
        CGRect editingCellFrame = self.editingCell.frame;
        editingCellFrame.size.height += difference;
        self.editingCell.frame = editingCellFrame;

        // Update UITableView contentSize
        self.contentSize = CGSizeMake(self.contentSize.width, self.contentSize.height + difference);

        // Scroll to bottom if cell is at the end of the table
        if (self.editingNoteInEndOfTable) {
            self.contentOffset = CGPointMake(self.contentOffset.x, self.contentOffset.y + difference);
        } else {
            // Update all next to editing cells
            NSInteger editingCellIndex = [self.visibleCells indexOfObject:self.editingCell];
            for (NSInteger i = editingCellIndex; i < self.visibleCells.count; i++) {
                UITableViewCell *cell = self.visibleCells[i];
                CGRect cellFrame = cell.frame;
                cellFrame.origin.y += difference;
                cell.frame = cellFrame;
            }
        }
        [self endUpdates];
    }
    self.previousTextHeight = textHeight;
}

0

আমি @ জয়ের দুর্দান্ত উত্তরটি ব্যবহার করেছি এবং এটি আইওএস 8.4 এবং এক্সকোড 7.1.1 এর সাথে পুরোপুরি কাজ করেছে।

আপনি যদি আপনার ঘরটিকে টগল-সক্ষম করতে চাইছেন, আমি নীচের ক্ষেত্রে-টেবিলভিডিওডিজিট নির্বাচন করেছি:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
//This is the bit I changed, so that if tapped once on the cell, 
//cell is expanded. If tapped again on the same cell, 
//cell is collapsed. 
    if (self.currentSelection==indexPath.row) {
        self.currentSelection = -1;
    }else{
        self.currentSelection = indexPath.row;
    }
        // animate
        [tableView beginUpdates];
        [tableView endUpdates];

}

আমি আশা করি এর কোনটি আপনাকে সহায়তা করেছে।


0

এই পদ্ধতিটি আইওএস 7 এর পরে এবং পরে দেখুন Check

- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath{
    return UITableViewAutomaticDimension;
}

আইওএস ৮-এ এর উন্নতি হয়েছে We আমরা এটিকে টেবিল দেখার সম্পত্তি হিসাবে সেট করতে পারি।



0

ইনপুট -

টেবিলভিউ.বেগিনআপডেটস () টেবিল ভিউ.ইনডাপ্টেটস () এই ফাংশনগুলিতে কল করবে না

ফানক টেবিলভিউ (_ টেবিল ভিউ: ইউআইটিবেলভিউ, সেলফরওআউট ইনডেক্সপথ: ইনডেক্সপথ) -> ইউআইটিএবলভিউসেল}

তবে, যদি আপনি করেন, টেবিলভিউ.রেলোডআর (এ: [নির্বাচিত ইন্ডেক্সপথ! সূচকপথ হিসাবে]: সাথে কোনটি নেই)

এটি ফানক টেবিল ভিউ (_ টেবিলভিউ: ইউআইটিবেল ভিউ, সেলফরওআউট ইনডেক্সপথ: ইনডেক্সপথ) -> ইউআইটিএবলভিউসেল}} এই ফাংশনটিকে কল করবে।


-1

আমি এই সমস্যাটি কেবল সামান্য হ্যাক দিয়ে সমাধান করেছি:

static int s_CellHeight = 30;
static int s_CellHeightEditing = 60;

- (void)onTimer {
    cellHeight++;
    [tableView reloadData];
    if (cellHeight < s_CellHeightEditing)
        heightAnimationTimer = [[NSTimer scheduledTimerWithTimeInterval:0.001 target:self selector:@selector(onTimer) userInfo:nil repeats:NO] retain];
}

- (CGFloat)tableView:(UITableView *)_tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
        if (isInEdit) {
            return cellHeight;
        }
        cellHeight = s_CellHeight;
        return s_CellHeight;
}

যখন আমাকে ঘরের উচ্চতা প্রসারিত করতে হবে আমি সেট করেছিলাম isInEdit = YESএবং পদ্ধতিটি কল করি [self onTimer]এবং এটি সেল বৃদ্ধি অ্যানিমেট করে যতক্ষণ না এটি s_CellHeightEditing মান :-) পৌঁছায়


সিমুলেটরটিতে দুর্দান্ত কাজ করে তবে আইফোনটিতে হার্ডওয়্যারটি অচল। 0.05 টাইমার বিলম্বের সাথে এবং সেল ইউনিট 5 ইউনিট বাড়ানোর সাথে, এটি অনেক ভাল, তবে কোরএ্যানিমেশন এর মতো কিছুই নেই
ডিজামির

1
নিশ্চিত করুন, পোস্টের আগে..আপনার আগে।
অজয়_নাসা

-2

নির্বাচিত সারির সূচিপত্রটি পান। টেবিলটি পুনরায় লোড করুন। UITableViewDelegate এর উচ্চতার জন্যRowAtIndexPath পদ্ধতিতে, নির্বাচিত সারির উচ্চতাটি একটি আলাদা উচ্চতায় সেট করুন এবং অন্যদের জন্য স্বাভাবিক সারির উচ্চতা ফিরে আসুন


2
-1, কাজ করে না। [table reloadData]উচ্চতা পরিবর্তনের ফলাফলগুলি কল করা অ্যানিমেটেড না করে তাত্ক্ষণিকভাবে ঘটবে।
মার্ক আমেরিকা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.