Запрет изменения размера UIButton.imageView по изображению - PullRequest
0 голосов
/ 09 октября 2018

У меня есть UIButton с фиксированной высотой 40 (высота ограничения 40), где я устанавливаю изображение с помощью кода, который представляет собой pdf (vectorgraphic) размером 64x64 .Результат должен быть:

enter image description here

Я добавил изображение, как показано ниже:

image = [UIImage imageNamed:@"icon-clear"];
[self setImage:image forState:UIControlStateNormal];

Результат, который я получаюis:

enter image description here

Добавлена ​​черная рамка для imageView для лучшей визуализации.imageView имеет окончательный размер 64x40 .

Я думаю, что происходит то, что imageView получает изображение и его размер будет изменен до 64x64 и уменьшен с помощью ограничений кнопок до 40, но резервирует ширину 64.

Я пробовал несколько вещей:

self.imageView.frame = CGRect(0,0,32,32);
self.imageView.bounds = CGRect(0,0,32,32);

или

let aspectRatioConstraint = [NSLayoutConstraint constraintWithItem:self.imageView attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:self.imageView attribute:NSLayoutAttributeHeight multiplier:1.0 constant:0];
[self.imageView addConstraint:aspectRatioConstraint];

или

[self.imageView.widthAnchor constraintEqualToConstant:32];

Единственное, что внесло визуальное изменение, было:

UIGraphicsBeginImageContext(size);
[image drawInRect:CGRectMake(0, 0, size.width, size.height)];
UIImage *destImage = UIGraphicsGetImageFromCurrentImageContext();    
UIGraphicsEndImageContext();

, но в результате получилось плохое качество изображения, и я предполагаю проблемы с производительностью.

Я просто хочу использоватьвекторный файл pdf для ситуаций с несколькими размерами.Как можно дать кнопкам imageView фиксированный размер с UIViewContentModeScaleAspectFit для изображения.

thx много!

1 Ответ

0 голосов
/ 09 октября 2018

Я наконец решил это, добавив self.imageView.frame = CGRectMake(4, 4, 32, 32); к методу - (void)layoutSubviews {}.

Итак,

- (void)layoutSubviews {
    [super layoutSubviews];
    self.imageView.contentMode = UIViewContentModeScaleAspectFit;
    self.imageView.frame = CGRectMake(4, 4, 32, 32);
}

сделали это.

...