Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Xcode 8-一些视图和;VCs没有出现在模拟器上_Ios_Swift_Xcode_Xcode8 Beta6 - Fatal编程技术网

Ios Xcode 8-一些视图和;VCs没有出现在模拟器上

Ios Xcode 8-一些视图和;VCs没有出现在模拟器上,ios,swift,xcode,xcode8-beta6,Ios,Swift,Xcode,Xcode8 Beta6,该应用程序在升级到Xcode 8 Beta 6和Swift 3之前运行良好。我什么也没改变,但现在我有两个问题 首先,一些随机视图不再显示。它们只是方形的彩色盒子。不过,上面的视图显示出来了 在界面生成器中: 在模拟器上: 第二,我的VC模型在分段时不再出现。以前是这样的,我可以看到segue正在被调用,但现在它不在了 如果有人能提供关于这两个问题的想法,我们将不胜感激。自动布局约束可能出现了问题。再次检查这些设置是否正确 此外,您不需要使用模拟器来验证这一点;使用助理编辑器的预览视图:

该应用程序在升级到Xcode 8 Beta 6和Swift 3之前运行良好。我什么也没改变,但现在我有两个问题

首先,一些随机视图不再显示。它们只是方形的彩色盒子。不过,上面的视图显示出来了

在界面生成器中:

在模拟器上:

第二,我的VC模型在分段时不再出现。以前是这样的,我可以看到segue正在被调用,但现在它不在了


如果有人能提供关于这两个问题的想法,我们将不胜感激。

自动布局约束可能出现了问题。再次检查这些设置是否正确

此外,您不需要使用模拟器来验证这一点;使用助理编辑器的预览视图:


作为一项健全性检查,我要做的第一件事是将视图中的所有元素重置为建议的约束,以查看这是否解决了问题。

因此,在Xcode 7/Swift 2-->Xcode 8/Swift 3之间,如何将UIView变为圆改变了一些情况。这是我现在的代码:

func roundView (_ viewToRound: UIView) {
    viewToRound.layer.cornerRadius = 20
    //viewToRound.layer.cornerRadius = (viewToRound.frame.width/2)
    viewToRound.clipsToBounds = true
}

如您所见,我已将cornerRadius方法替换为显式的“20”,而不是从视图大小推断。在我之前的“frame.width”中,视图根本没有显示出来。现在他们又恢复正常了。我不知道发生了什么变化,但这确实解决了它。

这肯定是Xcode 8中的自动布局问题。如果不使用自动布局,问题就不存在。我使用一个协议来解决这个问题:

protocol Roundable {}

extension Roundable where Self: UIView{

    func roundCorners(){

        self.layer.cornerRadius = self.bounds.height / 2
    }
}

class CustomView: UIView, Roundable {

    override var bounds: CGRect {

        didSet{
            roundCorners()
        }
    }
}

将视图设置为CustomView,它将显示为四舍五入。我在这里使用了一个协议,因为通过这种方式很容易扩展已经存在的UIView子类,使其具有绕过拐角的功能。当然,可以直接在bounds属性observer中设置cornerRadius

iOS 10 UIView生命周期和自动布局存在问题

我的意思是,在
viewdiload
&
viewwillbeen
等方法中,所有UI元素上的框架都是`{0,0},{10001000}

在设置圆角的情况下,使用500px生成圆角&您将获得不可见的UI组件:)


我如何解决这个问题是通过在
UIViewControllers
UIView
子类中的
viewDidLayoutSubview
中设置圆角

我会重新排列上面盒子下面的任何东西,然后放回盒子后面。Xcode中有一个恼人的bug,其中脚本中项目的安排不是模拟器如何看待顺序的。手动来回拖动可以解决问题。@Sethmr谢谢,我试过了,但没用。但是,我不确定这些约束是否正确,因为我可以看到它们在preview assistant中工作。我也尝试过两次重新启动Xcode。请确保在任何上下文中都正确安装了约束。如果您滚动到属性检查器的底部,您将看到一个复选框,其中包含installed和任何可能的上下文类型的缩写。确保复选框中没有显示自己的对象,然后对附加到它们的每个约束执行相同的操作。@Sethmr如果我刚刚注释掉我的roundView函数,突然视图可见,有什么想法吗?roundView函数只有两行:viewToRound.layer.cornerRadius=(viewToRound.frame.width/2)viewToRound.clipsToBounds=True我知道使用viewToRound.layer.cornerRadius=(viewToRound.frame.width/2)如果在ViewDidDisplay完成之前或在awakeFromNib()之前实施,则拐角半径的值将不正确,具体取决于启动视图的方式。它将根据情节提要值确定宽度,因此通常是错误的,除非宽度为常量值。clipstobunds我不是100%肯定它所做的一切,但这肯定会有让某些东西消失的效果。我找到了使用它的理由,但如果它做了我喜欢的事情,它总是一个尝试和错误,而且似乎没有解决它,但它有帮助。我还没有在预览助手中签入它。在预览助手中,它看起来很好。我试着按照@Sethmr评论中的建议去做,但没有成功。苹果从未停止让我惊讶的是,他们如何能让开发人员在每次更新中都过上地狱般的生活。这实际上发生了,因为在viewDidLoad和ViewWillAspect方法中,视图的框架总是{0,0,1000,1000}阅读更多信息