2017-01-27 2 views
0

Я новичок в разработке iOS, но не так новичок в C#. Я решил сделать учебник, предоставленный Xamarin/Microsoft, а затем попытаться расширить его. Я искал способ установить изображение в центре UINavigationBar, и я нашел, что правильный способ сделать это должен был использовать NavigationItem.TitleView = myImageView;Масштабировать изображение в NavigationItem.TitleView для размещения внутри UINavigationBar

Это отлично работает! Однако есть одна проблема: изображение, которое я использовал, просто больше, чем NavigationBar. Я хочу масштабировать (и сохранять пропорции) изображение, чтобы оно вписывалось в навигационную панель, а также выглядело неплохо. Вот то, что я сделал до этого момента, чтобы получить изображение:

var logo = UIImage.FromFile("PolarisLogoBlank.png"); 
var iView = new UIImageView(logo); 

NavigationItem.TitleView = iView; 

А вот картина того, что я получаю:

enter image description here

Любая помощь очень ценится; спасибо!

ответ

4

Вы должны установить как высоту изображенияView, так и contentMode изображенияView, чтобы изображение не растягивалось. Это то, что вы ищете:

iView.contentMode = .scaleAspectFit 
if let navigationController = navigationController { 
    iView.frame.size.height = navigationController.navigationBar.frame.size.height 
} 

или с силой разворачивания

iView.contentMode = .scaleAspectFit 
iView.frame.size.height = navigationController!.navigationBar.frame.size.height 
+1

Итак, 'iView.ContentMode = UIViewContentMode.ScaleAspectFit;' работает нормально; однако, когда я пытаюсь использовать iView.Frame.Size.Height = NavigationController.NavigationBar.Frame.Size.Height; ', он сообщает мне, что я не могу изменить возвращаемое значение' CGRect.Size', потому что это не переменная " –

+0

Ах, да. Этот 'iView.frame.size.height =' в swift является ярлыком, который фактически создает новую структуру (CGSize) со старым значением ширины и новым значением высоты, а затем присваивает ее iView.frame.size'. Таким образом, вам нужно создать новую структуру размера и назначить ширину старой ширине и высоте до новой высоты. CGRect (фрейм) также является структурой, поэтому вам может понадобиться создать новый Rect и назначить его для iView.frame. –

+0

Я тестировал код @DarrylLJohnson, и он отлично работает. –

1

Вы можете установить размер imageView:

iView.frame.size.height = self.navigationController.navigationBar.frame.size.height; 

я не уверен, что именно это выглядит в C#, но это, как вы могли бы сделать это в Objective-C.

Надеюсь, что это поможет.

+0

Вы были на том же треке, что Дэррил выше был, безусловно, било вам upvote. То, что вы опубликовали, включает ярлыки в Swift, которых нет в C#, поэтому мне пришлось создать новую структуру Frame (CGRect) и манипулировать значениями. Спасибо приятель! –

+0

Без проблем, извините, я не мог дать весь ответ. Рад, что вы поняли! – naturaln0va

Смежные вопросы