UILabel未配置为自动布局

时间:2016-03-24 09:59:14

标签: ios swift uitableview autolayout

我有一个表格视图应用程序(见图片。)一些单元格右侧的横幅是一个布尔值,用户在添加控制器中决定(由加号提示。)此横幅称为紧急我的代码中的图像。顶部标签称为主题标签,底部标签称为截止日期标签。

enter image description here

我遇到的问题是主题标签上的自动布局。在某些标签上,底部被切断,但在其他标签上却没有。似乎当有多条线时,会发生切断。自动布局约束如下所示。

![enter image description here

这是我的viewDidLoad:,我添加了自我调整单元格代码:

 override func viewDidLoad() {
    super.viewDidLoad()

    let fetchRequest = NSFetchRequest(entityName: "Agenda")
    let sortDescriptor = NSSortDescriptor(key: "subject", ascending: true)
    fetchRequest.sortDescriptors = [sortDescriptor]

    if let managedObjectContext = (UIApplication.sharedApplication().delegate as? AppDelegate)?.managedObjectContext {

        fetchResultController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: managedObjectContext, sectionNameKeyPath: nil, cacheName: nil)
        fetchResultController.delegate = self

        do {
            try fetchResultController.performFetch()
            content = fetchResultController.fetchedObjects as! [Agenda]
        } catch {
            print(error)
        }
    }

    tableView.estimatedRowHeight = 90.0
    tableView.rowHeight = UITableViewAutomaticDimension
}

2 个答案:

答案 0 :(得分:0)

看起来您的单元格不够垂直,无法垂直裁剪您的顶部标签。

编辑:作者实际上正在研究自定义单元格,因此本答案的第一部分不是有效的解决方案。

你能做的是:

  • 将顶部标签垂直抗压强度设置为1000(必需)
  • 在2个标签之间建立20垂直间距约束750优先级(高优先级)约束

编辑: 您的单元格是自定义的,如果您更改紧急图像视图约束/大小,它可能来自您的Label没有更新其布局的问题。如果是这种情况,您可以尝试更改此UILabel子类的Label自定义类:

Objectice-C:

@implementation AutoLayoutLabel

- (void)layoutSubviews {
    [self setNeedsUpdateConstraints];
    [super layoutSubviews];
    self.preferredMaxLayoutWidth = CGRectGetWidth(self.bounds);
}

@end

Swift 中,它会是:

import UIKit    

class AutoLayoutLabel: UILabel {

    override func layoutSubviews() {
        self.setNeedsUpdateConstraints()
        super.layoutSubviews()
        self.preferredMaxLayoutWidth = CGRectGetWidth(self.bounds)
    }

}

由于您无法发送您的项目,我们无法真正看到您的代码设置的限制,我上传了一个具有相同单元格设计的工作测试项目:On the go multiline cell Xcode project

将此Xcode项目中的内容重现为您的项目。

答案 1 :(得分:0)

Ok以下是基于多个标签行实现动态表高度的步骤。我在swift应用程序的Table视图中实现了这个功能。按照步骤操作:

  1. 为表视图实现这两个委托函数函数:

    • estimatedHeightForRowAtIndexPath:返回50(或表格所需的最小高度)
    • heightForRowAtIndexPath:返回UITableViewAutomaticDimension(这是iOS 8引入的)
  2. 在您的故事板中,您需要这样做:

    • 将标签行设置为0.
    • 假设您有两个标签(标签(顶部),详细信息标签(下方)):不要为您的标签指定底部约束,指定前导,尾随和顶部。使用前导,尾随和顶部为细节标签指定底部约束,然后为细节标签设置垂直间距。希望所有自动布局错误都不应该存在。
  3. 构建并验证。

  4. 让我知道它何时起作用!!!