andreamazz / andreamazz/AMTagListView

Setting text with setupText or setTagText (after adding the tag to tag list) changes the size of the tag

Aperta
#66 4 commenti 0 reazioni 0 assegnatari Vedi su GitHub
Lingua principale
Objective-C
Stelle
757
Fork
112
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Descrizione

Lets say I have a below setup:

- An AMTagListView named as tagListView.
- An AMTagView named as tag1. The text for the tag is "Custom" and it has an accessory image. Below is the code for tag creation and adding it to tagListView:

```objc
AMTagView *tag1 = [[AMTagView alloc] initWithFrame:CGRectZero];
[tag1 setAccessoryImage:[UIImage imageNamed:@"close"]];
[tag1 setupWithText:@"Custom"];
[self.tagListView addTagView:tag1];
```
So when the tag list view shows up on screen, the frame of the tag1: `{{10, 39}, {82, 29}}`

I wrote a tap handler which does nothing but just resets the text to same text. Code below:

```objc
[self.tagListView setTapHandler:^(AMTagView *view) {
[view setTagText:[NSString stringWithFormat:@"%@", view.tagText]];
}];
```

If I check the frame after setTagText, it shows up as `{{211, 0}, {106, 30}}`

This happens because when we use addTagView to add tag to the tagListView, the addTagView method recalculates the width of the tag as shown below:

```objc
- (UIView *)addTagView:(UIView *)tagView andRearrange:(BOOL)rearrange {
if ([tagView isKindOfClass:[AMTagView class]]) {
UIFont *font = [[[tagView class] appearance] textFont];
CGSize size = [((AMTagView *)tagView).tagText sizeWithAttributes:@{NSFontAttributeName: font}];
CGPoint padding = [[[tagView class] appearance] textPadding];
float tagLength = [[[tagView class] appearance] tagLength];
size.width = (int)size.width + padding.x * 2 + tagLength;
size.height = (int)size.height + padding.y;
size.width = MIN(size.width, self.frame.size.width - self.marginX * 2);
tagView.frame = (CGRect){{0, 0}, {size.width, size.height}};`
}
[self.tags addObject:tagView];
```

We use setupText: or setTagText: to modify the text for the tag that has already been added. Since the tag has already been added, we don't use addTagView: method and hence the above calculation doesn't happen.

As a workaround, I am adding and removing the tag after modifying the text so that it maintains the same padding.

Is this the expected behavior?

Guida per i contributori

Nessuna guida per i contributori indicizzata per questo repository

Valutazione

Questa issue non è ancora stata valutata.

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.