2016-11-30 42 views
0

我知道这是一个难以调试的问题。我会尽力解释,你可以从评论部分提问。用swift消息气泡限制

我想在我的应用程序中使用消息气泡。我为约束编写了一些代码,但效果不佳。

enter image description here

我怎么可以把蓝色气泡的左边缘到红线?

这里是我的代码:

当的tableview细胞加载此方法运行:

private func setup() { 
    bubbleImageView = UIImageView(image: bubbleImage.incoming, highlightedImage: bubbleImage.incomingHighlighed) 
    bubbleImageView.userInteractionEnabled = true 

    messageLabel = UILabel(frame: CGRectZero) 
    messageLabel.font = UIFont.systemFontOfSize(15) 
    messageLabel.numberOfLines = 0 
    messageLabel.userInteractionEnabled = true 
    selectionStyle = .None 
    contentView.addSubview(bubbleImageView) 
    bubbleImageView.addSubview(messageLabel) 
    messageLabel.translatesAutoresizingMaskIntoConstraints = false 
    bubbleImageView.translatesAutoresizingMaskIntoConstraints = false 
    contentView.addConstraint(NSLayoutConstraint(item: bubbleImageView, attribute: .Left, relatedBy: .Equal, toItem: contentView, attribute: .Left, multiplier: 1, constant: 10)) 
    contentView.addConstraint(NSLayoutConstraint(item: bubbleImageView, attribute: .Top, relatedBy: .Equal, toItem: contentView, attribute: .Top, multiplier: 1, constant: 4.5)) 
    bubbleImageView.addConstraint(NSLayoutConstraint(item: bubbleImageView, attribute: .Width, relatedBy: .Equal, toItem: messageLabel, attribute: .Width, multiplier: 1, constant: 30)) 
    contentView.addConstraint(NSLayoutConstraint(item: bubbleImageView, attribute: .Bottom, relatedBy: .Equal, toItem: contentView, attribute: .Bottom, multiplier: 1, constant: -4.5)) 

    bubbleImageView.addConstraint(NSLayoutConstraint(item: messageLabel, attribute: .CenterX, relatedBy: .Equal, toItem: bubbleImageView, attribute: .CenterX, multiplier: 1, constant: -2)) 

    bubbleImageView.addConstraint(NSLayoutConstraint(item: messageLabel, attribute: .CenterY, relatedBy: .Equal, toItem: bubbleImageView, attribute: .CenterY, multiplier: 1, constant: -0.5)) 
    messageLabel.preferredMaxLayoutWidth = 218 
    bubbleImageView.addConstraint(NSLayoutConstraint(item: messageLabel, attribute: .Height, relatedBy: .Equal, toItem: bubbleImageView, attribute: .Height, multiplier: 1, constant: -15)) 
} 

正如你看到的,我创建文本泡沫背景和标签。

而第二种方法:

func setCell(message:Message) { 
    messageLabel.text="testtesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttest" 
    var layoutAttribute: NSLayoutAttribute 
    var layoutConstant: CGFloat 
    if message.incoming { 
     bubbleImageView.image=bgImage.incoming 
     messageLabel.textColor = UIColor.blackColor() 
     layoutAttribute = .Left 
     layoutConstant = 10 
    }else{ 
     if message.isSent == 1 { 
      bubbleImageView.image = bgImage.outgoing 
     } 
     if message.isSent == 0 { 
      bubbleImageView.image = bgImage.notYetSent 
     } 
     messageLabel.textColor = UIColor.whiteColor() 
     layoutAttribute = .Right 
     layoutConstant = -10 
    } 

    contentView.addConstraint(NSLayoutConstraint(item: bubbleImageView, attribute: layoutAttribute, relatedBy: .Equal, toItem: contentView, attribute: layoutAttribute, multiplier: 1, constant: layoutConstant)) 

} 

什么是我的代码的问题?它对传入消息(灰色气泡)工作良好,对于传出消息不起作用(蓝色泡泡)

+0

I M面临的一个问题有同样的事情 –

回答

0

我明白了。你必须添加一个不允许气泡超过最大宽度的约束。所以,你必须添加一个这样的约束:

let widthConstraint = NSLayoutConstraint(item: youritem, attribute: NSLayoutAttribute.Width, relatedBy: NSLayoutRelation.LessThanOrEqual, 
    toItem: self.youItem.superview, attribute: NSLayoutAttribute.Width, 
multiplier: 1.0, constant: 100) 
+0

I M面临的一个问题有同样的事情 –