2016-05-16 70 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大于你想要的最大宽度,那么你可以检查标签的宽度,如果它设置为最大宽度,则保持不变(例如'min(maxWidth,textContainer.frame.size.width)'也可以尽管你可能不想缩小标题的范围,但要调整标签缩放因子以适应缩小。 – beyowulf