标签: snapkit

自定义 TableViewCell 触发 NSLayoutConstraint 错误 'UIView-Encapsulated-Layout-Height'

我对单元格使用自动高度。每次我想用新数据(这里是模型变量)更新我的单元格时,我都会更新我的自动布局约束,但出现错误。在这里只是为了说明这个问题,我什至没有改变约束。我只是要求重新计算布局。

在单元格的第一次初始化时:没有警告,没问题。

错误:

<NSLayoutConstraint:0x174285d70 'UIView-Encapsulated-Layout-Height'
 UITableViewCellContentView:0x1030f8a50.height == 500   (active)>
Run Code Online (Sandbox Code Playgroud)

编码:

tableView.rowHeight = UITableViewAutomaticDimension

override func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
      return 500
  }

class TestTableViewCell: UITableViewCell {

  var model: X? {
    didSet {
      setNeedsLayout()
      layoutIfNeeded()
    }
  }

    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }

    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

        // Configure the view for the selected state
    }

  override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
    super.init(style: style, reuseIdentifier: reuseIdentifier) …
Run Code Online (Sandbox Code Playgroud)

uitableview ios autolayout swift snapkit

4
推荐指数
1
解决办法
986
查看次数

如何在Swift中使用SnapKit使UIView具有相等的宽度和高度?

我想在Swift中使用SnapKit将UIView做成矩形,像这样

lazy var customView: UIView = {
        let view = UIView(frame: CGRect())
        self.addSubview(view)
        view.snp.makeConstraints({ (make) in
            make.left.top.bottom.equalToSuperview().inset(self.inset)
            make.width.equalTo(make.height)  // Error in this line
        })
        return view
    }()
Run Code Online (Sandbox Code Playgroud)

ios autolayout swift snapkit

4
推荐指数
1
解决办法
6167
查看次数

使用 SnapKit 到纵横比和更小的尺寸

我试图在 SnapKit 中创建此布局的约束,但我很难设置最大大小 (lessThanOrEqual)。

布局

let maxWidthContainer: CGFloat = 435
let maxHeightContainer: CGFloat = 600

containerView.snp.makeConstraints {
    $0.width.equalTo(containerView.snp.height).multipliedBy(maxWidthContainer / maxHeightContainer)
    $0.centerX.centerY.equalToSuperview()
    $0.leading.trailing.equalToSuperview().inset(38).priorityLow()
}
Run Code Online (Sandbox Code Playgroud)

swift ios-autolayout snapkit

4
推荐指数
1
解决办法
8447
查看次数

iOS 11,状态栏,导航栏和UIScrollview

我正在为iOS 11的应用程序进行一些更新,并遇到了一些我无法理解的问题.我的视图控制器以编程方式创建其所有子视图.

第一个孩子是Imageview.最重要的是,我添加了一个UIScrollView.在滚动视图中有一个UIView,在其中有一个标签.我通过代码使用SnapKit进行Autolayout约束.

iOS 9和iOS 10运行良好 - 没有问题.但是,在iOS 11中,它似乎工作正常,直到我"滚动"滚动视图.它没有像iOS 9和10那样弹回原来的位置,而是向下滚动,好像插图大约是实际的2倍.

它看起来像什么

// Scroll View
myScrollView = UIScrollView()
myScrollView.contentInset = UIEdgeInsetsMake(scrollInsetHeight(), 0, 0, 0)
myScrollView.backgroundColor = barBackgroundColor
myScrollView.isUserInteractionEnabled = true
self.view.addSubview(myScrollView)
myScrollView.snp.makeConstraints {
    make in
    make.edges.equalTo(self.view)
}

// Content View
contentView = UIView()
contentView.isUserInteractionEnabled = true
myScrollView.addSubview(contentView)
contentView.snp.makeConstraints {
    make in
    make.edges.equalTo(myScrollView)
    make.width.equalTo(self.view)
}

// Label
let lbl = UILabel()
lbl.text = "..."

lbl.font = UIFont(name: "OpenSans", size: 17)
lbl.textColor = .white
lbl.numberOfLines = 0

contentView.addSubview(lbl)
lbl.snp.makeConstraints {
    make in …
Run Code Online (Sandbox Code Playgroud)

ios swift3 snapkit ios11

3
推荐指数
1
解决办法
2071
查看次数

使用 Snapkit 查看动画

我尝试了使用 Snapkit 制作灯光动画的不同教程,但似乎没有任何帮助。我什至尝试过 Spring 框架,但效果不佳。这是我的代码。

private func setupMatchView() {
    view.addSubview(matchOverlayView)
    matchOverlayView.snp.makeConstraints { (make) in
        make.top.equalTo(view.safeAreaLayoutGuide.snp.topMargin)
        make.bottom.equalTo(view.safeAreaLayoutGuide.snp.bottomMargin)
        make.left.equalToSuperview()
        make.right.equalToSuperview()
    }
    matchOverlayView.backgroundColor = UIColor.white.withAlphaComponent(0.5)

    view.addSubview(matchView)
    matchView.snp.makeConstraints { (make) in
        make.left.equalToSuperview().offset(32)
        make.right.equalToSuperview().inset(32)
        make.centerX.equalToSuperview()
        make.centerY.equalToSuperview()
    }
    matchView.backgroundColor = .white
    matchView.layer.cornerRadius = 8
    matchView.dropShadow()

    matchView.addSubview(matchYourImageView)
    matchYourImageView.snp.makeConstraints { (make) in
        make.height.width.equalTo(100)
        make.centerX.equalToSuperview().inset(20)
        make.top.equalToSuperview().offset(40)
    }
    matchYourImageView.backgroundColor = UIColor(red:0.77, green:0.77, blue:0.77, alpha:1.00)
    matchYourImageView.layer.cornerRadius = 50
    matchYourImageView.clipsToBounds = true

    matchView.addSubview(matchHerImageView)
    matchHerImageView.snp.makeConstraints { (make) in
        make.height.width.equalTo(100)
        make.centerX.equalToSuperview().inset(-20)
        make.top.equalTo(matchYourImageView.snp.top)
    }
    matchHerImageView.backgroundColor = UIColor(red:0.69, green:0.69, blue:0.69, alpha:1.00)
    matchHerImageView.layer.cornerRadius = 50
    matchHerImageView.clipsToBounds = …
Run Code Online (Sandbox Code Playgroud)

swift snapkit

3
推荐指数
1
解决办法
4301
查看次数

如何让 SnapKit 约束左右边缘?

现在如果我想将左侧和右侧的边距设置为相等,则需要两行:

label.snp.makeConstraints { make in
    make.left.equalTo(Constants.margin)
    make.right.equalTo(-Constants.margin)
}
Run Code Online (Sandbox Code Playgroud)

API 还允许我使用以下命令一次设置所有 4 个(左/右/上/下)边缘:

label.snp.makeConstraints { make in
    make.edges.equalTo(Constants.margin
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能编写一个允许这样的扩展?

label.snp.makeConstraints { make in
    make.horizontalMargins.equalTo(Constants.margin)
}
Run Code Online (Sandbox Code Playgroud)

结果应等于第一个代码片段。

ios swift snapkit

3
推荐指数
1
解决办法
3008
查看次数

SnapKit 和动态 UITableViewCell 未正确布局

我目前正在构建一个可重用的视图,它利用 UITableView 为其单元格提供的动态调整大小。

我想要实现的是根据在结构中定义的 size 属性中给定的大小为单元格内的视图提供宽度和高度,我在设置后使用配置函数传递它视图的大小。

然后我将它放在 xAxis 的中心,并使用结构中的一个属性在视图周围应用任何边距,该属性只是一个 UIEdgeInset 属性。使用 SnapKit 库,这看起来像这样。

    if  let formImageItem = formImageItem,
        let size = formImageItem.size {

        formItemImgVw = UIImageView(frame: CGRect(x: 0, y: 0, width: size.width, height: size.height))
        formItemImgVw?.image = formImageItem.image
        formItemImgVw?.contentMode = formImageItem.aspectFit

        contentView.addSubview(formItemImgVw!)

        formItemImgVw?.snp.makeConstraints({ (make) in
              make.size.equalTo(CGSize(width: size.width, height: size.height))
              make.top.equalTo(formImageItem.margin.top)
              make.bottom.equalTo(formImageItem.margin.bottom)
              make.centerX.equalToSuperview()
        })
    }
Run Code Online (Sandbox Code Playgroud)

我似乎遇到的问题是我收到以下警告。

2018-10-12 14:57:34.101532+0100 xxxx Dev[6104:2160548] [LayoutConstraints] Unable to simultaneously satisfy constraints.
    Probably at least one of the constraints in the following list is one you don't want. …
Run Code Online (Sandbox Code Playgroud)

uitableview ios autolayout swift snapkit

3
推荐指数
1
解决办法
2854
查看次数

如何使用自动调整其高度的 SnapKit 以编程方式创建 UITableViewCell?

看似简单的事情,其实做起来真的很难。我已经在这里和 SnapKit GitHub 上浏览了多个主题,但未能解决我的问题。

我想要UITableViewCell一个位于中间的标签,让我们从单元格的顶部和底部说 50。

值得一提的是,单元格是以编程方式创建的

override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
    super.init(style: style, reuseIdentifier: reuseIdentifier)
    self.addSubview(titleLabel)
    titleLabel.snp.makeConstraints { (make) -> Void in
        make.topMargin.equalToSuperview().offset(50.0)
        make.left.equalToSuperview().inset(UIView.getValueScaledByScreenWidthFor(baseValue:10.0))
        make.bottomMargin.equalToSuperview().offset(50.0)

    }
}
Run Code Online (Sandbox Code Playgroud)

在 ViewController 中,我尝试了两种自动单元格高度的方法:

 extension EpisodeViewController: UITableViewDelegate {
  func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
    return UITableViewAutomaticDimension
  }
}
Run Code Online (Sandbox Code Playgroud)

tableView.estimatedRowHeight = 100
tableView.rowHeight = UITableViewAutomaticDimension
Run Code Online (Sandbox Code Playgroud)

viewDidLoad()方法中

我得到的是:

在此处输入图片说明

这三个单元格中的每一个都应填充“测试” - 相反,它在不调整单元格大小的情况下将标签向下推到相应单元格下方。

尝试了许多不同的组合,例如:

1) 将约束优先级设置为 999 - 没有变化

2) 添加到 contentView 而不是 self - 根本不显示

3) …

uitableview ios autolayout swift snapkit

3
推荐指数
1
解决办法
1852
查看次数

由于未捕获的异常而终止应用程序无法安装约束,原因:视图之间没有通用的超级视图

我试图以编程方式创建一个按钮并使用SnapKit应用约束.一切正常,但当我应用约束,因为make.center.equalTo(self.view) 它崩溃给我这条消息"终止应用程序由于未捕获的异常无法安装约束,原因:视图之间没有共同的超级视图".这是我创建按钮的代码:

    func createButton() {
    let button   = UIButton(type: UIButtonType.System) as UIButton
    button.backgroundColor = UIColor.greenColor()
    button.setTitle("Test Button", forState: UIControlState.Normal)
    button.addTarget(self, action: "buttonAction:", forControlEvents: UIControlEvents.TouchUpInside)

    button.snp_makeConstraints { (make) -> Void in
        make.width.equalTo(200)
        make.height.equalTo(70)
        make.center.equalTo(self.view)
    }

    self.view.addSubview(button)
}
Run Code Online (Sandbox Code Playgroud)

ios swift snapkit

2
推荐指数
1
解决办法
596
查看次数

带有snapkit的垂直居中UIImageView

如何使用snapkit在超级视图中垂直居中放置UIImageView?我这样尝试过:

 imageview.snp.makeConstraints { (make) in
            make.centerY.equalTo(view.center.y);

        }
Run Code Online (Sandbox Code Playgroud)

但似乎不太好。我该如何使用snapkit

swift snapkit

2
推荐指数
2
解决办法
2265
查看次数

标签 统计

snapkit ×10

swift ×9

ios ×7

autolayout ×4

uitableview ×3

ios-autolayout ×1

ios11 ×1

swift3 ×1