HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ios – 手动布局中的Autolayout大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我可以在使用frame,bounds,autoresizingMask来定位自己的父视图中添加autolayout视图吗?

通常在互联网上你会看到另一种方式,但我无法实现这种情况.

编辑:
我为你们添加了一些代码.只需使用“Single View Application”创建一个新的Xcode项目,并将以下代码粘贴到为我们创建的ViewController.swift上.

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let custom = CustomManualLayoutSubviews()
        let subview = UIView()
        let childView = UIView()

        custom.BACkgroundColor = UIColor.redColor()
        subview.BACkgroundColor = UIColor.greenColor()
        childView.BACkgroundColor = UIColor.blueColor()

        custom.setTranslatesAutoresizingMaskIntoConsTraints(false)
        subview.setTranslatesAutoresizingMaskIntoConsTraints(false)
        childView.setTranslatesAutoresizingMaskIntoConsTraints(false)

        view.addSubview(custom)
        custom.addSubview(subview)
        subview.addSubview(childView)

        pinToParent(view,child: custom)
        pinToParent(subview,child: childView)
    }

    private func pinToParent(parent: UIView,child: UIView) {
        parent.addConsTraints(NSLayoutConsTraint.consTraintsWithVisualFormat("V:|-10-[view]-10-|",options: .allZeros,metrics: nil,views: ["view" : child]))
        parent.addConsTraints(NSLayoutConsTraint.consTraintsWithVisualFormat("H:|-10-[view]-10-|",views: ["view" : child]))
    }
}

class CustomManualLayoutSubviews : UIView {

    override func layoutSubviews() {
        super.layoutSubviews()

        for subview in subviews as! [UIView] {
            subview.frame = bounds.rectByInsetTing(dx: 10,dy: 10)
            println("subview frame: \(subview)")
        }
    }

}

代码可以看出,子视图使用手动布局,而自定义和childView使用Autolayout.但结果是使用autolayout的childView没有显示在屏幕上,当我检查它时,我看到它有0宽度,0高度.

这就是我得到的,根本没有蓝色区域.

解决方法

是的,但你必须非常小心并且相当有限.

从技术上讲,如果窗口中的任何视图使用自动布局,则窗口中的所有内容都使用自动布局.只是从框架自动生成约束,并为其translatesAutoresizingMaskIntoConsTraints保留的视图autoresizingMask.

因此,您必须确保您的约束不会干扰那些自动生成的约束.你可以使用translatesAutoresizingMaskIntoConsTraints从视图中“松散”东西,但是你的约束不能“推”或“拉”那些视图.使用translatesAutoresizingMaskIntoConsTraints的视图必须具有完全的移动自由度和大小.

例如,您可以使用约束将按钮定位在容器视图前缘的一小段距离内,但如果您还约束到后缘,则最好使内容拥抱和压缩阻力优先级非常低,以便他们不会尝试改变容器的宽度.即便如此,您最终可能会遇到冲突.在自动布局中,视图的宽度不允许为负.如果容器设置为零宽度并且按钮与边缘的距离不为零,则这将是冲突.因此,对后沿的约束也应该具有低优先级,以便在必要时可以将其破坏. (或者你可以为前沿做到这一点.)

您说您无法使用translatesAutoresizingMaskIntoConsTraints在视图中使用自动布局.如果您需要进一步的帮助,您需要解释您尝试过的内容以及尝试时发生的事情.

大佬总结

以上是大佬教程为你收集整理的ios – 手动布局中的Autolayout全部内容,希望文章能够帮你解决ios – 手动布局中的Autolayout所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。