-
Notifications
You must be signed in to change notification settings - Fork 112
Description
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:
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:
[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:
- (UIView<AMTag> *)addTagView:(UIView<AMTag> *)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?