视图框架在运行时不受约束

时间:2015-06-11 02:47:23

标签: ios swift uitableview autolayout

我有UITableViewCell,上面有三个标签。两个沿着顶部,一个沿着底部保持一些内容。我限制了两个顶部标签,使它们距离视图顶部8个点。左侧标签距离前缘8分钟,右侧标签距离后缘8分钟。然后我将左侧标签设置为距右侧标签最小12pts。

标题约束

View in Xcode: Title constraints

日期约束

View in Xcode: Date constraints

当我评估它时,它在Xcode中看起来很好。我可以添加一个非常长的标题(左上方标签)并正确截断文本,给我12pt边距到日期标签。

当我在运行时运行应用程序时,似乎没有应用约束。标题标签是设备的整个宽度,日期标签no无处可见。

iPhone 5 Simulator

它在iPhone 5,5s,6和6 Plus模拟器上执行此操作。我究竟做错了什么?在我的viewDidLoad()方法中,我正在加载包含UITableViewCell的nib,然后注册它。我还在UINavigationController添加了一个按钮。

override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view, typically from a nib.
    self.navigationItem.leftBarButtonItem = self.editButtonItem()
    if let split = self.splitViewController {
        let controllers = split.viewControllers
        self.detailViewController = controllers[controllers.count-1].topViewController as? DetailViewController
    }

    // Register our additional nibs
    let nibName = UINib(nibName: "StandardNoteCell", bundle: nil)
    tableView.registerNib(nibName, forCellReuseIdentifier: identifier)

    self.newNoteButton = self.createNewRoundButton()
    self.navigationController?.view.addSubview(self.newNoteButton)
}

有什么突出的不正确吗?

3 个答案:

答案 0 :(得分:2)

问题在于,您有两个文本标签,其中包含有关如何解决不能完全适合可用水平空间的情况的模糊信息。

要解决此问题,请将日期标签的抗压性设置为“1000(必需)”。这样,无论如何,日期总是可见,而其他视图(在这种情况下,标题标签)将通过缩小来解决这个问题。

作为一项实验,请尝试将两个标签的抗压力设置为1000.这是不可能实现的,您将在控制台中看到错误。因此,请谨慎使用所需的约束 - 您希望您的约束尽可能灵活。

答案 1 :(得分:1)

XCode不知道UILabel的大小,你可以看到你的约束在水平轴上都是红色的。 您的问题有两种解决方案

  1. 设置标签的宽度
  2. 设置标签的拥抱/压缩
  3. 如果设置宽度,标签将不会调整大小,具体取决于屏幕的大小。 如果设置拥抱,它将根据每个UITextField的优先级进行扩展/收缩

    内容拥抱:不想成长

    内容压缩阻力:不想缩小

    enter image description here

答案 2 :(得分:0)

只是一个疯狂的猜测,但你的日期标签实际上是用任何文字设置的吗?因为如果没有,它会解释你正在观察的行为。