Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/106.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.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 使用自定义文本字段自动布局_Ios_Swift_Autolayout_Uitextfield - Fatal编程技术网

Ios 使用自定义文本字段自动布局

Ios 使用自定义文本字段自动布局,ios,swift,autolayout,uitextfield,Ios,Swift,Autolayout,Uitextfield,我正确地设置了我的自动布局,它可以正常工作。但是,当我在横向中使用自定义UITextField类时,边框不会更改。我使用以下代码: required init?(coder aDecoder: (NSCoder!)) { super.init(coder: aDecoder) self.delegate=self; border.borderColor = UIColor(netHex: 0xc6c6c6).cgColor

我正确地设置了我的自动布局,它可以正常工作。但是,当我在横向中使用自定义UITextField类时,边框不会更改。我使用以下代码:

   required init?(coder aDecoder: (NSCoder!)) {
        super.init(coder: aDecoder)
        self.delegate=self;
        border.borderColor = UIColor(netHex: 0xc6c6c6).cgColor

        border.frame = CGRect(x: 0, y: self.frame.size.height - width, width:  self.frame.size.width, height: self.frame.size.height)
        border.borderWidth = width
        self.layer.addSublayer(border)
        self.layer.masksToBounds = true
        //self.font = UIFont(name: "System", size: CGFloat(23))
    }

    override func draw(_ rect: CGRect) {
        border.frame = CGRect(x: 0, y: self.frame.size.height - width, width:  self.frame.size.width, height: self.frame.size.height)



    }

    override func awakeFromNib() {
        super.awakeFromNib()
        border.frame = CGRect(x: 0, y: self.frame.size.height - width, width:  self.frame.size.width, height: self.frame.size.height)


    }

当方向改变时,我该如何更改自定义边框大小。

我的一个应用程序需要在方向改变时更改约束。虽然您可以使用大小类和特征集合,但我的需求远远不止这些

大小类在大多数情况下工作得很好,堆栈控件也工作得很好,但我需要尽可能最大化GLKView,因此,将4个滑块从底部(纵向)移动到右侧(横向)。如果你使用大小类编码一个通用应用程序,你会很快了解到无论方向是什么,iPad都有“正常”大小

下面是我如何编写这个应用程序来检查它的方向

首先,我扩展了UIView:

extension UIView {
    public func orientationHasChanged(_ isInPortrait:inout Bool) -> Bool {
        if self.frame.width > self.frame.height {
            if isInPortrait {
                isInPortrait = false
                return true
            }
        } else {
            if !isInPortrait {
                isInPortrait = true
                return true
            }
        }
        return false
    }
}
在我的视图控制器中,我有以下内容:

var initialOrientation = true
var isInPortrait = false

override func viewWillLayoutSubviews() {
    super.viewDidLayoutSubviews()
    if initialOrientation {
        initialOrientation = false
        if view.frame.width > view.frame.height {
            isInPortrait = false
        } else {
            isInPortrait = true
        }
    } else {
        if view.orientationHasChanged(&isInPortrait) {
            // place your orientation change code here - isInPortrait will indicate which orientation the device is in
        }
    }
}
我发现viewWillLayoutSubviews()是最适合我的位置,因为它最初会被点击,每次方向改变时都会被点击。还有其他地方——特别是viewDidLayoutSubviews()和ViewWillTransistito(大小:)——但是WWDC谈论的使应用程序自适应的第2部分也使用了这一点。此外,您现在拥有所需的所有视图大小


需要记住的关键是,viewWIllLayoutSubviews()在应用程序启动和/或方向更改期间可能会被调用几次,因此您需要为此编写代码。生成两个Bool变量就可以解决这个问题,而您的代码只运行一次。

我的一个应用程序需要在方向改变时更改约束。虽然您可以使用大小类和特征集合,但我的需求远远不止这些

大小类在大多数情况下工作得很好,堆栈控件也工作得很好,但我需要尽可能最大化GLKView,因此,将4个滑块从底部(纵向)移动到右侧(横向)。如果你使用大小类编码一个通用应用程序,你会很快了解到无论方向是什么,iPad都有“正常”大小

下面是我如何编写这个应用程序来检查它的方向

首先,我扩展了UIView:

extension UIView {
    public func orientationHasChanged(_ isInPortrait:inout Bool) -> Bool {
        if self.frame.width > self.frame.height {
            if isInPortrait {
                isInPortrait = false
                return true
            }
        } else {
            if !isInPortrait {
                isInPortrait = true
                return true
            }
        }
        return false
    }
}
在我的视图控制器中,我有以下内容:

var initialOrientation = true
var isInPortrait = false

override func viewWillLayoutSubviews() {
    super.viewDidLayoutSubviews()
    if initialOrientation {
        initialOrientation = false
        if view.frame.width > view.frame.height {
            isInPortrait = false
        } else {
            isInPortrait = true
        }
    } else {
        if view.orientationHasChanged(&isInPortrait) {
            // place your orientation change code here - isInPortrait will indicate which orientation the device is in
        }
    }
}
我发现viewWillLayoutSubviews()是最适合我的位置,因为它最初会被点击,每次方向改变时都会被点击。还有其他地方——特别是viewDidLayoutSubviews()和ViewWillTransistito(大小:)——但是WWDC谈论的使应用程序自适应的第2部分也使用了这一点。此外,您现在拥有所需的所有视图大小


需要记住的关键是,viewWIllLayoutSubviews()在应用程序启动和/或方向更改期间可能会被调用几次,因此您需要为此编写代码。生成两个布尔变量可以解决这个问题,您的代码将只运行一次。

此代码与自动布局有何关系?此外,您是否有纵向模式和横向模式的图像来查看差异?对不起。问题在于边界,而不是自动布局。更改方向时,不会修改自定义边框宽度。请从控制器(viewWIllLayoutSubviews或ViewWillTransitiono(大小:)或视图(layoutSubviews)中检查方向。根据视图边界,编写您需要的代码。我几乎为您提供了所需的代码。了解视图生命周期以及方向更改时触发的内容(这是我提供给您的函数/方法),检查视图边界(其高度和宽度)以确定方向。基于此,更改边界。(当然,对于很多事情——也许不是这样——你可以使用自动布局,以及大小和特征类)。这段代码与自动布局有什么关系?此外,你有纵向模式和横向模式的图像来了解差异吗?对不起。问题在于边界,而不是自动布局。更改方向时,不会修改自定义边框宽度。请从控制器(viewWIllLayoutSubviews或ViewWillTransitiono(大小:)或视图(layoutSubviews)中检查方向。根据视图边界,编写您需要的代码。我几乎为您提供了所需的代码。了解视图生命周期以及方向更改时触发的内容(这是我提供给您的函数/方法),检查视图边界(其高度和宽度)以确定方向。基于此,更改边界。(当然,对于许多事情——也许不是这样——您可以使用自动布局,以及大小和特征类)。