Вот кое-что, что я придумал после применения нескольких принципов других постов SO, включая ссылку Аарона:
AnnotationPin *myAnnotation = (AnnotationPin *)annotation;
self = [super initWithAnnotation:myAnnotation reuseIdentifier:reuseIdentifier];
self.backgroundColor = [UIColor greenColor];
self.frame = CGRectMake(0,0,30,30);
imageView = [[UIImageView alloc] initWithImage:myAnnotation.THEIMAGE];
imageView.frame = CGRectMake(3,3,20,20);
imageView.layer.masksToBounds = NO;
[self addSubview:imageView];
[imageView release];
CGSize titleSize = [myAnnotation.THETEXT sizeWithFont:[UIFont systemFontOfSize:12]];
CGRect newFrame = self.frame;
newFrame.size.height = titleSize.height + 12;
newFrame.size.width = titleSize.width + 32;
self.frame = newFrame;
self.layer.borderColor = [UIColor colorWithRed:0 green:.3 blue:0 alpha:1.0f].CGColor;
self.layer.borderWidth = 3.0;
UILabel *infoLabel = [[UILabel alloc] initWithFrame:CGRectMake(26,5,newFrame.size.width-32,newFrame.size.height-12)];
infoLabel.text = myAnnotation.title;
infoLabel.backgroundColor = [UIColor clearColor];
infoLabel.textColor = [UIColor blackColor];
infoLabel.textAlignment = UITextAlignmentCenter;
infoLabel.font = [UIFont systemFontOfSize:12];
[self addSubview:infoLabel];
[infoLabel release];
В этом примере я добавляю пользовательский пин-код в класс MKAnnotation, который изменяет размер UILabelв соответствии с размером текста.Он также добавляет изображение в левой части представления, поэтому вы видите часть кода, управляющего правильным интервалом для обработки изображения и заполнения.
Ключ должен использовать CGSize titleSize = [myAnnotation.THETEXT sizeWithFont:[UIFont systemFontOfSize:12]];
, а затем переопределить представлениеразмеры.Вы можете применить эту логику к любому представлению.
Хотя ответ Аарона работает для некоторых, он не работает для меня.Это гораздо более подробное объяснение, которое вы должны попробовать немедленно, прежде чем отправиться куда-либо еще, если вы хотите более динамичный вид с изображением и изменяемым размером UILabel.Я уже сделал всю работу за тебя !!