2013-04-26 2 views
2

Я пытаюсь изменить размер кнопки удаления ячейки UITableView с помощью этого кода, но по какой-то причине x & y работает нормально, но я не могу изменить высоту & Ширина кнопки удаления. Я использую этот код в своем классе UITableViewCell, и все работает отлично, превосходя его ширину & hight кнопки «Удалить». Что мне здесь не хватает?пользовательский размер кнопки удаления UITableviewCell

- (void)layoutSubviews 
{ 
[super layoutSubviews]; 
[UIView beginAnimations:nil context:NULL]; 
[UIView setAnimationBeginsFromCurrentState:YES]; 
[UIView setAnimationDuration:0.0f]; 

for (UIView *subview in self.subviews) { 
    if ([NSStringFromClass([subview class]) isEqualToString:@"UITableViewCellDeleteConfirmationControl"]) { 

     CGRect newFrame = subview.frame; 
     newFrame.origin.x = 250; 
     newFrame.origin.y = 47; 
     newFrame.size.height = 30; 
     newFrame.size.width = 50; 

     deleteButtonView.frame = newFrame; 
     subview.frame = newFrame; 
    } 
} 
[UIView commitAnimations];} 
+0

посмотрите http://stackoverflow.com/a/4579013/1328096 – jamil

+0

взгляд на эту ссылку http://stackoverflow.com/questions/ 6861431/uitableviewcell-delete-button-frame –

+0

Решение, использующее ограничения и избегающее любого сбоя пользовательского интерфейса: http://stackoverflow.com/a/36159390/882754 –

ответ

3

использовать этот код ...

if ([NSStringFromClass([subview class]) isEqualToString:@"UITableViewCellDeleteConfirmationControl"]) { 
     UIView *deleteButtonView = (UIView *)[subview.subviews objectAtIndex:0]; 
     CGRect f = deleteButtonView.frame; 
     f.origin.x = 250; 
     f.origin.y = 47; 
     f.size.width = 30; 
     f.size.height = 50; 

     CGRect sf = self.frame; 
     sf.size.width = 100; 
     sf.size.height = 100; 

     deleteButtonView.frame = f; 
     self.frame = sf; 
} 

увидеть другой ответ по этой ссылке ... iphone-uitableview-delete-button

+0

К сожалению, вы не можете зависеть от имени класса, поскольку он продолжает меняться для каждого iOS , Прямо сейчас его 'UITableViewCellDeleteConfirmationView'. –

2

Используйте этот код в пользовательский класс Cell

-(void)layoutSubviews 
{ 
    NSMutableArray *subviews = [self.subviews mutableCopy]; 
    UIView *subV = subviews[0]; 
    [subviews removeObjectAtIndex:0]; 
    CGRect f = subV.frame; 
    f.size.height = 70; // Here you set height of Delete button 
    subV.frame = f; 
} 
+1

Он также меняет высоту ячейки. –

+0

это работает, но .. когда мой текст динамичен .. как я могу установить это –

1

Найти «UITableViewCellDeleteConfirmationView» в UITableviewCell для изменения высоты кнопки удаления.

Используйте этот код в пользовательский класс клеток

- (void)layoutSubviews { 
[super layoutSubviews]; 
NSMutableArray *subviews = [self.subviews mutableCopy]; 
while (subviews.count > 0) 
{ 
    UIView *subV = subviews[0]; 
    [subviews removeObjectAtIndex:0]; 

    if ([NSStringFromClass([subV class])isEqualToString:@"UITableViewCellDeleteConfirmationView"])//Here you select the subView of delete button { 
    UIView *deleteButtonView = (UIView *)[self.subviews objectAtIndex:0]; 


    CGRect buttonFrame = deleteButtonView.frame; 
    buttonFrame.origin.x = deleteButtonView.frame.origin.x; 
    buttonFrame.origin.y = deleteButtonView.frame.origin.y; 
    buttonFrame.size.width = deleteButtonView.frame.size.width; 
     buttonFrame.size.height = 70; //Here you set the height 
    deleteButtonView.frame = buttonFrame; 

} 
} 

}

0

Вы также можете сделать это с помощью ограничений (работает на IOS 8.x +). Таким образом, анимация (особенно анимация кнопки удаления) остается чистой/нет сбоя пользовательского интерфейса.

В вашем UITableViewCell подкласса:

Объявите слабое свойство в классе анонимной категории:

@property (weak, nonatomic) UIView *lastDeleteConfirmationView; 

Отключить перевод из автоматического изменения маски ограничений и добавить свои собственные ограничения:

- (void)layoutSubviews { 
    [super layoutSubviews]; 

    [self addConstraintsToCellDeleteConfirmationView]; 
} 

- (void)addConstraintsToCellDeleteConfirmationView { 
    UIView *deleteConfirmationView = nil; 
    for (UIView *subview in self.subviews) { 
     if ([NSStringFromClass(subview.class) isEqualToString:@"UITableViewCellDeleteConfirmationView"]) { 
      deleteConfirmationView = subview; 
      break; 
     } 
    } 

    if (deleteConfirmationView && self.lastDeleteConfirmationView != deleteConfirmationView) { 
     self.lastDeleteConfirmationView = deleteConfirmationView; 
     self.lastDeleteConfirmationView.translatesAutoresizingMaskIntoConstraints = NO; 

     [NSLayoutConstraint constraintWithItem:self.customBackgroundView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.lastDeleteConfirmationView attribute:NSLayoutAttributeTop multiplier:1.0f constant:0.0f].active = YES; 

     [NSLayoutConstraint constraintWithItem:self.customBackgroundView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:self.lastDeleteConfirmationView attribute:NSLayoutAttributeHeight multiplier:1.0f constant:0.0f].active = YES; 

     [NSLayoutConstraint constraintWithItem:self.lastDeleteConfirmationView attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:self.lastDeleteConfirmationView.superview attribute:NSLayoutAttributeRight multiplier:1.0f constant:0.0f].active = YES; 
    } 
} 
0

SWIFT

переопределение функ layoutSubviews() в CustomTableViewCell: UITableViewCell

override func layoutSubviews() { 

    for subview in self.subviews { 

     if String(describing: type(of: subview.self)).isEqualToString("UITableViewCellDeleteConfirmationView") { 

      var newFrame = subview.frame 
      newFrame.origin.y = 10 
      newFrame.size.height = 60 
      subview.frame = newFrame 
     } 
    } 
} 
Смежные вопросы