Неправильные размеры UIImageView на навигационном элементе - PullRequest
0 голосов
/ 24 сентября 2018

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

UIImageView* menuButton=[[UIImageView alloc]initWithFrame:CGRectMake(4, 7, 20, 20)];
    menuButton.image=[UIImage imageNamed: Model.icon.MapList];
    UIBarButtonItem *accountBarItem = [[UIBarButtonItem alloc] initWithCustomView:menuButton];
    self.navigationItem.leftBarButtonItem = accountBarItem;

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

Также эта проблема появляется только на iPhoneбольше, чем модель iPhone 5.

Что мне не хватает?

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

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

Вот что вы сейчас испытываете (используя imageView напрямую в качестве пользовательского представления элемента кнопки панели):

- (void)_addImageViewToLeftButtonItemWithoutOuterView {
    UIImageView *profileImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Homer.jpg"]];
    [profileImageView setFrame:CGRectMake(0, 0, 40, 40)];
    profileImageView.layer.cornerRadius = 20.0f;
    profileImageView.layer.masksToBounds = YES;
    profileImageView.clipsToBounds = YES;
    profileImageView.layer.borderColor = [UIColor blackColor].CGColor;
    profileImageView.layer.borderWidth = 1.0f;
    UIBarButtonItem *rbi = [[UIBarButtonItem alloc] initWithCustomView:profileImageView];
    self.navigationItem.leftBarButtonItem = rbi;
}

Вот как это выглядит без подгонки аспекта:

Issue without aspect fit

И с набором подгонки аспекта:

Issue with aspect it

И это то, что я считаю, что вы хотите:

- (void)_addImageViewToLeftButtonItemWithOuterView {
    UIView *profileView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 40, 40)];
    profileView.layer.borderColor = [[UIColor redColor] CGColor];
    profileView.layer.borderWidth = 2.0f;
    UIImageView *profileImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Homer.jpg"]];
    profileImageView.contentMode = UIViewContentModeScaleAspectFit;
    [profileImageView setFrame:CGRectMake(0, 0, 40, 40)];
    profileImageView.layer.cornerRadius = 20.0f;
    profileImageView.layer.masksToBounds = YES;
    profileImageView.clipsToBounds = YES;
    profileImageView.layer.borderColor = [UIColor blackColor].CGColor;
    profileImageView.layer.borderWidth = 1.0f;
    [profileView addSubview:profileImageView];
    UIBarButtonItem *lbi = [[UIBarButtonItem alloc] initWithCustomView:profileView];
    self.navigationItem.leftBarButtonItem = lbi;
}

Что приводит к этому:

Image View in outer view

Как вы, наверное, заметили, сортировочный трюк здесь заключается в том, что вы не хотите добавлять представление изображения непосредственно как пользовательское представление в пределах initWithCustomView UIBarButtonItem.Вместо этого вы хотите использовать внешний вид для удержания imageView, затем вы можете отрегулировать рамку своего подпредставления, чтобы переместить его.

Вот еще один пример, если вы хотите, чтобы изображение было дальше вправо (очевидно, вы выигралине хочу границы для внешнего вида изображения, но я просто оставил ее там для демонстрационных целей):

- (void)_addImageViewToLeftButtonItemWithOuterView {
    // adjust this to 80 width (it always starts at the origin of the bar button item
    UIView *profileView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 80, 40)];
    profileView.layer.borderColor = [[UIColor redColor] CGColor];
    profileView.layer.borderWidth = 2.0f;
    UIImageView *profileImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Homer.jpg"]];
    profileImageView.contentMode = UIViewContentModeScaleAspectFit;
    // and adjust this to be offset by 40 (move it to the right some)
    [profileImageView setFrame:CGRectMake(40, 0, 40, 40)];
    profileImageView.layer.cornerRadius = 20.0f;
    profileImageView.layer.masksToBounds = YES;
    profileImageView.clipsToBounds = YES;
    profileImageView.layer.borderColor = [UIColor blackColor].CGColor;
    profileImageView.layer.borderWidth = 1.0f;
    [profileView addSubview:profileImageView];
    UIBarButtonItem *lbi = [[UIBarButtonItem alloc] initWithCustomView:profileView];
    self.navigationItem.leftBarButtonItem = lbi;
}

Image moved to the right

0 голосов
/ 24 сентября 2018

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

UIButton *b = [UIButton buttonWithType:UIButtonTypeCustom];
[b setFrame:CGRectMake(0.0f, 0.0f, 25.0f, 25.0f)];
[b addTarget:self action:@selector(randomMsg) forControlEvents:UIControlEventTouchUpInside];
[b setImage:[UIImage imageNamed: Model.icon.MapList] forState:UIControlStateNormal];

UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithCustomView:b];

self.navigationItem.leftBarButtonItem = item;

Если у вас неправильное соотношение сторон, вы можете использовать

[[b imageView] setContentMode: UIViewContentModeScaleAspectFit];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...