2016-05-16 5 views
0

Я хочу, чтобы мое приложение, чтобы вести себя так:центрирования два вида в судоходстве titleView

enter image description here

Это важно иметь точное поведение моего NavigationItem.titleView

Я последовал за эти действия до сих пор:

Я создаю три вида программно в моем приложении:

(1) container => имеет место (2) и (3) => имеет gestureRecognizer присоединен

let container = UIView(frame: CGRectMake(0,0,200,40)) 

(2) imageContainer => имеет изображение

 let imageContainer = UIImageView(frame: CGRectMake(0, 0, 30, 30)) 
     imageContainer.image = UIImage(named: "mock.jpg") 

(3) textContainer = > имеет некоторый текст

 let textContainer = UILabel(frame: CGRectMake(0,0, 180, 20)) 
     textContainer.text = "Group xY" 

После я устанавливаю центр изображения, чтобы выровнять их:

imageContainer.center = CGPointMake(container.frame.size.width/2, 
     container.frame.size.height/2) 
textContainer.center = CGPointMake(container.frame.size.width/2, 
      container.frame.size.height/2) 

Теперь я добавляю все подвиды на мой взгляд, и установка

self.navigationItem.titleView = (1) 

Запуск приложения показывает, что элементы в titleView в не выровнены

enter image description here

Есть ли способ правильно реализовать это точное поведение?

Примечание: не беспокойтесь о круговом изображении. Я знаю, как это реализовать.

ответ

1

Вы должны установить размер textContainer ближе к границам текста. Вы можете сделать это, вызвав sizeToFit, тогда вам нужно установить imageContainer в левую часть текста, чтобы центр изображения был на половину ширины изображения плюс буфер с начала текста. Вы могли бы это сделать, сказав imageContainer.center = CGPointMake(textContainer.frame.minX - imageContainer.frame.size.width * 0.5 - buffer,container.frame.size.height/2). Ваш код должен выглядеть примерно так:

let container = UIView(frame: CGRectMake(0,0,200,40)) 
let buffer:CGFloat = 8.0 
let maxWidth:CGFloat = 120.0 

let imageContainer = UIImageView(frame: CGRectMake(0, 0, 30, 30)) 
imageContainer.image = UIImage(named: "profile.jpg") 

let textContainer = UILabel(frame: CGRectMake(0,0, 180, 20)) 
textContainer.text = "Group xY" 
textContainer.adjustsFontSizeToFitWidth = true 
textContainer.minimumScaleFactor = 0.95 

textContainer.sizeToFit() 
textContainer.frame.size.width = min(maxWidth, textContainer.frame.size.width) 
textContainer.center = CGPointMake(container.frame.size.width/2, 
            container.frame.size.height/2) 
imageContainer.center = CGPointMake(textContainer.frame.minX - imageContainer.frame.size.width * 0.5 - buffer, 
            container.frame.size.height/2) 

container.addSubview(imageContainer) 
container.addSubview(textContainer) 

который даст вам enter image description here для вашего контейнера.

+0

Спасибо. Это очень помогает. Есть ли способ установить максимальную ширину представления? если я поместил в него более длинный текст, весь Navbar будет заполнен, но я также хотел бы иметь свой Navigationbar.barButtonitems – JVS

+1

Я обновил свой ответ. Вы можете просто проверить ширину метки после 'sizeToFit', если она больше, чем самая большая ширина, которую вы хотите установить для максимальной ширины else оставить как есть (например,' min (maxWidth, textContainer.frame.size.width) 'Вы также можете скорректируйте коэффициент масштабирования меток, чтобы сжиматься до приспособления, хотя вы, вероятно, не хотите сжимать его связкой для названия. – beyowulf

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