标签: ios-autolayout

Autolayout:ViewDidAppear中的帧大小不正确

我有一个UIViewController,我正在通过IB使用Autolayout来定位和调整其子视图.

出于某种原因,我没有得到正确的UIView布局,我决定在VC中记录所有子视图大小.

我记录了子视图大小:

viewDidLoad{
   self.view.layoutIfNeeded()
   print(uiview.size)
}

viewDidLayoutSubviews{
 print(uiview.size)
}
viewWillAppear{
 print(uiview.size)

}
viewDidAppear{
 print(uiview.size)
}
Run Code Online (Sandbox Code Playgroud)

子视图大小是正确的:

  1. viewDidLoad中
  2. viewDidLayoutSubviews
  3. viewWillAppear中
  4. viewDidLayoutSubviews

但它变得不正确:

  1. viewDidLayoutSubviews
  2. viewDidAppear

如何使用ViewWillAppear中正确的子视图大小?为什么在最终的viewDidLayoutSubviews调用和viewDidAppear中我的尺寸不正确?

autolayout swift xcode6 ios8 ios-autolayout

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

Autolayout:updateConstraints不会调用方向更改

我正在学习Auto布局如何在iOS中运行.为此我创建了一个示例单视图应用程序,它有一个视图控制器(初始视图控制器)和一个自定义视图(我们称之为示例视图).我使用自动布局约束将示例视图添加到Main.storyboard中的视图控制器.我在Sample View中添加了一个按钮和一个标签,并带有自动布局约束.我重写了SampleView.m中的layoutSubviews和updateConstraints方法.这些被覆盖的方法只会调用它们的超级实现.我为这两种方法添加了一个断点并开始调试应用程序.以下是我的观察

  1. 我发现在SampleView中的layoutSubviews方法之前调用updateConstraints.但是我读了几篇帖子/答案,其中提到在updateConstraints之前调用layoutSubviews.现在我很困惑什么是正确的机制?updateConstraint在layoutSubviews之前调用,反之亦然.自动布局系统如何工作?

  2. 当我将设备从纵向旋转到横向或从横向旋转到纵向时,我发现SampleView的updateConstraints方法不会自动调用(但是layoutSubviews方法会自动调用),而我读了一些帖子/答案,说明在旋转时, updateConstraints方法自动调用.我再次混淆哪一个是真的?

  3. 如果updateConstrains方法没有在方向更改时自动调用,那么当方向更改时,如何在视图层次结构中的所有视图上调用updateConstraint方法?将在父视图上调用setNeedsUpdateConstraint,是否会在该视图的所有子视图上调用updateConstraint?

iphone objective-c ios autolayout ios-autolayout

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

在Autolayout IOS中使用标准值而不是常量

我刚刚开始学习IOS开发,所以我的知识很少.

我正在为我的应用构建我的布局.我需要我的应用程序在所有设备上运行.我在某处读过,在创建约束时永远不要使用常量幻数,并始终使用标准值.我想为所有决议支持我的应用程序

每当我设置标准值时,它为'0',这意味着我必须使用乘数值来获得相似的间距

如果我们能够使用恒定价值并且必须避免,请告知我们.

ios autolayout ios-autolayout

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

禁用UIScrollView AutoLayout可调整大小的ScrollView的水平滚动

我有一个UIScrollView,它根据某些条件在运行时调整大小.现在我正确地使用了自动布局,而不使用额外或更少的单个约束.滚动视图的第一个子视图具有滚动视图的前导,尾随,顶部,底部和相等宽度,内容视图的高度由其内部内容管理,内部内容也根据运行时条件而变化.现在根据我的约束我的内容视图不应该水平滚动,因为我使用相同的宽度滚动视图.但它正在发生.任何人都可以建议我做错了什么?这是我使用的约束的图像.

注意: - 我已经看到堆栈上的帖子,这样的问题得到了解答,但我的情况有所不同.

在此输入图像描述

uiscrollview ios autolayout ios-autolayout

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

强制将视图高度完全设置为零

我有一个观点,其中有很多subview。视图的高度取决于 的高度。subViews但在某种情况下,我希望视图的高度为 0,而不管其subView高度如何。我要实现这一点。例如,有一个名为 view 的视图,它有 2subView(image and label) view1view2. 约束是这样的。

 view1.top = view.top + 1
view1.height = 30
view2.top = view1.bottom
view.bottom = view2.bottom.
Run Code Online (Sandbox Code Playgroud)

swift ios-autolayout

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

删除以编程方式添加的约束

我阅读了许多关于如何删除通过情节提要添加的约束、拖动出口然后删除等的主题,但是我如何删除以编程方式添加的约束?例如

firstView.topAnchor.constraints(equalTo: secondView.bottomAnchor, constant: 15).isActive = true
Run Code Online (Sandbox Code Playgroud)

如何停用它,然后在需要时再次启用它。也许它应该是这样的?

firstView.removeConstraint(firstView.topAnchor.constraints(equalTo: secondView.bottomAnchor))
Run Code Online (Sandbox Code Playgroud)

ios swift ios-autolayout

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

表格视图单元格大小取决于故事板中的预览设备大小

我在屏幕宽度为 414 点的 iPhone 6 plus 上运行我的应用程序,如果我将预览设备设置为屏幕宽度为 375 点的 iPhone 7,当表格首次加载时,我会打印出尺寸viewdidload中表格的宽度为414,但表格单元格的宽度均为375,我向上和向后滚动后,宽度变为414。在多个UITableViewController中测试,都给出了相同的结果。

我的问题是:

为什么表格视图单元格的大小取决于预览设备大小?

首次加载时如何使单元格具有正确的大小?

tableView.layoutIfNeeded()、tableView.layoutSubViews() 不起作用。

ios swift ios-autolayout

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

无法将'[NSLayoutConstraint]'类型的值转换为预期的参数类型'NSLayoutConstraint'

我正在使用xcode 9 beta 5.我实际上添加了逆向

addConstraint(NSLayoutConstraint.constraints(withVisualFormat: "H: |-16-[v0]-16-|" , options: NSLayoutFormatOptions(), metrics: nil, views: ["v0":thumbnailImageView]))

addConstraint(NSLayoutConstraint.constraints(withVisualFormat: "V: |-16-[v0]-16-|" , options: NSLayoutFormatOptions(), metrics: nil, views: ["v0":thumbnailImageView]))
Run Code Online (Sandbox Code Playgroud)

我收到了错误.

addConstraint(NSLayoutConstraint.constraints(withVisualFormat: "H: |-16-[v0]-16-|" , options: NSLayoutFormatOptions(), metrics: nil, views: ["v0":thumbnailImageView]))

addConstraint(NSLayoutConstraint.constraints(withVisualFormat: "V: |-16-[v0]-16-|" , options: NSLayoutFormatOptions(), metrics: nil, views: ["v0":thumbnailImageView]))
Run Code Online (Sandbox Code Playgroud)

错误图片

如何删除此错误?

constraints swift ios-autolayout

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

如何将具有动态高度的 xib 子视图添加到 UIView

这应该很容易做到,而且在 android(使用 LinearLayout)中也很容易,但我不知道如何在 ios 中做到这一点。

我有 UIView,我想在其中添加一些动态高度子视图。子视图从 xib 文件加载并包含 2 个具有动态高度的 UILabels。

class Subview: UIView {

    @IBOutlet var contentView: UIView!

    @IBOutlet weak var title: UILabel!
    @IBOutlet weak var desc: UILabel!


    override init(frame: CGRect) {
        super.init(frame: frame)
        self.commonInit()
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        self.commonInit()
    }

    fileprivate func commonInit() {
        Bundle.main.loadNibNamed("Subview", owner: self, options: nil)
        addSubview(contentView)
        self.contentView.frame = self.bounds
        self.contentView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
    }

}
Run Code Online (Sandbox Code Playgroud)

和子视图是这样添加的

var containerView: UIView

func setupView() {

    let subview1 = Subview()
    subview1.title = "Some …
Run Code Online (Sandbox Code Playgroud)

xib uiview ios swift ios-autolayout

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

动画子视图 AutoLayout 约束更改

许多关于动画 AutoLayout 约束的教程建议更新约束的常量属性,然后调用layoutIfNeeded()动画块。

我的情况有点棘手。我有一个包含 3 个子视图的视图。这个 superview 的高度不是固定的 - 它被计算为其子视图的高度总和。在某些情况下,我要求这 3 个子视图之一切换其高度(它在 0 和 30 之间变化,即我想平滑地隐藏和显示它)。代码类似于:

// In superview
subview1.isVisibleInContext = !subview1.isVisibleInContext

// In subview
class MySubview: UIView {
    @IBOutlet var heightConstraint: NSLayoutConstraint!

    var isVisibleInContext = false {
        didSet {
            updateHeight()
        }
    }

    func toggleHeight() {
        let newHeight = isVisibleInContext ? 30 : 0
        layoutIfNeeded()
        heightConstraint.constant = newHeight
        UIView.animate(withDuration: 0.8) {
            self.layoutIfNeeded()
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,这并不像我期望的那样工作。我可以看到我的子视图高度的平滑变化,但是在我为我的子视图高度约束设置新值后,我的超级视图的高度会立即重新计算。

我想看到超级视图的高度随着其子视图的增长或减少而逐渐增加/减少。

请有人指出我正确的方向。任何帮助表示赞赏。

非常感谢!

uiviewanimation ios autolayout nslayoutconstraint ios-autolayout

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