无法在具有动态宽度的Tablecell中并排自动布局两个UILabel

时间:2015-10-19 10:21:14

标签: ios xamarin.ios autolayout

我有一个自定义单元格,需要并排布局两个UILabel。两个标签的宽度都是动态的,可以包装。

我已定义的AutoLayout在以下情况下失败

  1. 滚动单元格及其包含的部分,使其全部显示在屏幕上。
  2. 将设备旋转到横向(需要足够大的视图以使Cell处于屏幕状态)
  3. 向后旋转,左侧标签将被压缩。
  4. 如果整个Cell和包含Section在旋转之前不在屏幕上,则布局不会失败

    以下是一些工作和轮换后的屏幕截图

    enter image description here

    enter image description here

    这是具有以下约束的布局

    this.ContentView.AddConstraint(
        NSLayoutConstraint.Create(
            this.TextLabel, NSLayoutAttribute.Left, NSLayoutRelation.Equal, this.ContentView, NSLayoutAttribute.Left,
            1.0f, (nfloat)LeftRightPadding));
    
    this.ContentView.AddConstraint(
        NSLayoutConstraint.Create(
            this.TextLabel, NSLayoutAttribute.Top, NSLayoutRelation.Equal, this.ContentView, NSLayoutAttribute.Top,
            1.0f, (nfloat)TopAndBottomPadding));
    
    this.ContentView.AddConstraint(
        NSLayoutConstraint.Create(
            this.TextLabel, NSLayoutAttribute.Bottom, NSLayoutRelation.Equal, this.ContentView, NSLayoutAttribute.Bottom,
            1.0f, 0 - (nfloat)TopAndBottomPadding));
    
    this.ContentView.AddConstraint(
        NSLayoutConstraint.Create(
            this.DetailTextLabel, NSLayoutAttribute.Right, NSLayoutRelation.Equal, this.ContentView, NSLayoutAttribute.Right,
            1.0f, 0 - (nfloat)LeftRightPadding));
    
    this.ContentView.AddConstraint(
        NSLayoutConstraint.Create(
            this.DetailTextLabel, NSLayoutAttribute.Top, NSLayoutRelation.Equal, this.ContentView, NSLayoutAttribute.Top,
            1.0f, (nfloat)TopAndBottomPadding));
    
    this.ContentView.AddConstraint(
        NSLayoutConstraint.Create(
            this.DetailTextLabel, NSLayoutAttribute.Bottom, NSLayoutRelation.Equal, this.ContentView, NSLayoutAttribute.Bottom,
            1.0f, 0 - (nfloat)TopAndBottomPadding));
    
    this.ContentView.AddConstraint(
        NSLayoutConstraint.Create(
        this.DetailTextLabel, NSLayoutAttribute.Left, NSLayoutRelation.Equal, this.TextLabel, NSLayoutAttribute.Right,
            1.0f,
            10));
    

    如何停止挤压左侧标签?

1 个答案:

答案 0 :(得分:2)

将UILabels的内容拥抱优先级提高到750以上。

最初内容拥抱和内容压缩阻力优先级如下所示。

enter image description here

设置值如下

enter image description here

可以根据您的优先级设置任何值。