Ios 使用自定义文本字段自动布局
我正确地设置了我的自动布局,它可以正常工作。但是,当我在横向中使用自定义UITextField类时,边框不会更改。我使用以下代码: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
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)中检查方向。根据视图边界,编写您需要的代码。我几乎为您提供了所需的代码。了解视图生命周期以及方向更改时触发的内容(这是我提供给您的函数/方法),检查视图边界(其高度和宽度)以确定方向。基于此,更改边界。(当然,对于许多事情——也许不是这样——您可以使用自动布局,以及大小和特征类)。