使用Swift以编程方式在UIView中居中对齐标签和图像

托比亚斯

我在开发应用程序时遇到了我似乎无法解决的问题。

我正在做一个带有标签和图像的uiview。内容需要在视图内部居中。

问题在于,标签将包含不同的长度文本,并且视图本身将根据使用位置而具有不同的宽度。

这是它的外观:

在此处输入图片说明

此处带有较长的文字:

在此处输入图片说明

如您所见,即使文本长度可能不同,左侧也应该有1个标签,中间应该是一个uiimage,右侧是另一个标签,都应该居中。

这就是我到目前为止的代码。如果可能,我需要以编程方式执行此操作。我正在运行一个根据值创建按钮的方法。

    func cost(cost:Int){

    costView = UIView()
    costView?.setTranslatesAutoresizingMaskIntoConstraints(false)
    self.costView?.clipsToBounds = true
    self.addSubview(costView!)


    self.costLabel.frame = CGRectMake(0, 0, 60, self.bounds.size.height)
    self.costLabel.textAlignment = NSTextAlignment.Right
    self.costLabel.textColor = UIColor.whiteColor()
    self.costLabel.font = Services.exoFontWithSize(16)
    self.costLabel.text = String(cost)
    costView?.addSubview(costLabel)



    self.costBrainImageView = UIImageView(frame: CGRectMake(0, 0, self.bounds.size.height, self.bounds.size.height))
    self.costBrainImageView?.image = Graphics.maskImageNamed("CommonMediumBrain", color: UIColor.whiteColor())
    self.costBrainImageView?.contentMode = UIViewContentMode.ScaleAspectFill
    costView?.addSubview(costBrainImageView!)




    self.label.adjustsFontSizeToFitWidth = true
    self.label.setTranslatesAutoresizingMaskIntoConstraints(false)
    self.label.numberOfLines = 1
    self.label.minimumScaleFactor = 0.20
    self.label.textAlignment = NSTextAlignment.Right
    self.label.font = Services.exoFontWithSize(20)


    //Constraints
    var viewsDict = Dictionary <String, UIView>()
    viewsDict["label"] = label
    viewsDict["brainView"] = costView


    self.addConstraints(
        NSLayoutConstraint.constraintsWithVisualFormat(
            "V:|[label]|", options: nil, metrics: nil, views: viewsDict))
    self.addConstraints(
        NSLayoutConstraint.constraintsWithVisualFormat(
            "V:|[brainView]|", options: nil, metrics: nil, views: viewsDict))
    self.addConstraints(
        NSLayoutConstraint.constraintsWithVisualFormat(
            "H:|-[label]-5-[brainView]-|", options: NSLayoutFormatOptions.AlignAllCenterX, metrics: nil, views: viewsDict))

}

此刻自此行中断

NSLayoutFormatOptions.AlignAllCenterX

'无法解析约束格式:选项将要求的视图遮罩在水平边缘上对齐,这对于水平布局也是不允许的。H:|-[标签] -5- [brainView]-|

如果我删除所有内容都对齐到左侧而不是居中,但是我不确定这是完成我想做的正确方法。

关于如何解决这个问题的任何线索?

谢谢你的帮助

加布勒

首先,将更.AlignAllCenterX改为.AlignAllCenterY,原因是"H:|-[label]-5-[brainView]-|"指定视图如何水平放置,您想要labelbrainView具有相同的中心Y位置。

其次,创建一个包含所有3个视图的子视图,然后将此子视图居中在黑色矩形内。您可以costView用作子视图。以下是一些基于您现有代码的修改后的代码。

costView!.addSubview(label)

//Constraints
var viewsDict = Dictionary <String, UIView>()
viewsDict["label"] = label
viewsDict["brainView"] = costBrainImageView
viewsDict["costLabel"] = costLabel

costView!.addConstraints(
    NSLayoutConstraint.constraintsWithVisualFormat(
        "V:|[label]|", options: nil, metrics: nil, views: viewsDict))
costView!.addConstraints(
    NSLayoutConstraint.constraintsWithVisualFormat(
        "V:|[brainView]|", options: nil, metrics: nil, views: viewsDict))
costView!.addConstraints(
    NSLayoutConstraint.constraintsWithVisualFormat(
        "V:|[costLabel]|", options: nil, metrics: nil, views: viewsDict))
costView!.addConstraints(
    NSLayoutConstraint.constraintsWithVisualFormat(
        "H:|-[label]-5-[brainView]-5-[costLabel]-|", options: NSLayoutFormatOptions.AlignAllCenterY, metrics: nil, views: viewsDict))
costView!.backgroundColor = UIColor.redColor()

// center costView inside self
let centerXCons = NSLayoutConstraint(item: costView!, attribute: .CenterX, relatedBy: .Equal, toItem: self, attribute: .CenterX, multiplier: 1, constant: 0);
let centerYCons = NSLayoutConstraint(item: costView!, attribute: .CenterY, relatedBy: .Equal, toItem: self, attribute: .CenterY, multiplier: 1, constant: 0);
self.addConstraints([centerXCons, centerYCons])

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用Swift以编程方式在UIView中居中对齐标签和图像

来自分类Dev

在Swift中以编程方式居中按钮

来自分类Dev

Swift标签中的换行符和行数(以编程方式)

来自分类Dev

如何使用 CAShapeLayer 以编程方式在自定义 UIView 中居中绘制圆圈

来自分类Dev

使用自动布局以编程方式居中自定义UIView

来自分类Dev

另一个内部的居中对齐 UIView 无法以编程方式工作

来自分类Dev

具有ImageView和TextView的RelativeLayout-在ImageView下方将TextView对齐,均以编程方式在RelativeLayout中居中

来自分类Dev

如何以编程方式在UITableViewCells中居中放置图像?

来自分类Dev

在 Swift 中以编程方式设置 UI 约束(UIView 中的 Image 和 stackView)

来自分类Dev

使用填充和对齐方式连接图像

来自分类Dev

如何使用HTML和CSS居中对齐社交媒体标签

来自分类Dev

UITabbar图像和标题在ipad中未居中对齐

来自分类Dev

UITabbar图像和标题在ipad中未居中对齐

来自分类Dev

如何在xml布局中对齐弯曲的图像?是否可以在Java中以编程方式对齐?

来自分类Dev

使用Swift在UIScrollView中居中图像

来自分类Dev

使用@media时,图像未在div中居中对齐

来自分类Dev

使用@media时,图像在div中居中对齐

来自分类Dev

使用自动布局以编程方式居中UIView可使视图从超级视图中消失

来自分类Dev

以编程方式添加标签,并与情节提要中的标签对齐

来自分类Dev

在UIView中居中对齐CAShape层

来自分类Dev

在UIView中居中对齐CAShape层

来自分类Dev

在Swift中以编程方式切换标签栏

来自分类Dev

在 Swift 中以编程方式切换标签栏失败

来自分类Dev

使用QPixmap和QLabel在Qt Creator中以编程方式添加图像文件(.PNG)

来自分类Dev

在Swift中以编程方式将图像保存到xcassets

来自分类Dev

Bootstrap Div,文本和图像(对齐)居中

来自分类Dev

在 Swift 中,以编程方式创建 UIView 并向其添加控件并使用自动布局,使控件显示在视图的父级上

来自分类Dev

在Android中以编程方式居中ProgressBar

来自分类Dev

以编程方式使用约束来使UIIMageView居中

Related 相关文章

  1. 1

    使用Swift以编程方式在UIView中居中对齐标签和图像

  2. 2

    在Swift中以编程方式居中按钮

  3. 3

    Swift标签中的换行符和行数(以编程方式)

  4. 4

    如何使用 CAShapeLayer 以编程方式在自定义 UIView 中居中绘制圆圈

  5. 5

    使用自动布局以编程方式居中自定义UIView

  6. 6

    另一个内部的居中对齐 UIView 无法以编程方式工作

  7. 7

    具有ImageView和TextView的RelativeLayout-在ImageView下方将TextView对齐,均以编程方式在RelativeLayout中居中

  8. 8

    如何以编程方式在UITableViewCells中居中放置图像?

  9. 9

    在 Swift 中以编程方式设置 UI 约束(UIView 中的 Image 和 stackView)

  10. 10

    使用填充和对齐方式连接图像

  11. 11

    如何使用HTML和CSS居中对齐社交媒体标签

  12. 12

    UITabbar图像和标题在ipad中未居中对齐

  13. 13

    UITabbar图像和标题在ipad中未居中对齐

  14. 14

    如何在xml布局中对齐弯曲的图像?是否可以在Java中以编程方式对齐?

  15. 15

    使用Swift在UIScrollView中居中图像

  16. 16

    使用@media时,图像未在div中居中对齐

  17. 17

    使用@media时,图像在div中居中对齐

  18. 18

    使用自动布局以编程方式居中UIView可使视图从超级视图中消失

  19. 19

    以编程方式添加标签,并与情节提要中的标签对齐

  20. 20

    在UIView中居中对齐CAShape层

  21. 21

    在UIView中居中对齐CAShape层

  22. 22

    在Swift中以编程方式切换标签栏

  23. 23

    在 Swift 中以编程方式切换标签栏失败

  24. 24

    使用QPixmap和QLabel在Qt Creator中以编程方式添加图像文件(.PNG)

  25. 25

    在Swift中以编程方式将图像保存到xcassets

  26. 26

    Bootstrap Div,文本和图像(对齐)居中

  27. 27

    在 Swift 中,以编程方式创建 UIView 并向其添加控件并使用自动布局,使控件显示在视图的父级上

  28. 28

    在Android中以编程方式居中ProgressBar

  29. 29

    以编程方式使用约束来使UIIMageView居中

热门标签

归档