Ios 如何通过编程将视图大小添加到其父视图中?
我正在使用自定义键盘,它有自己的视图,我在Interface Builder中编辑该视图 该视图在加载时以编程方式添加到键盘根视图。它包含堆栈视图,并填充整个视图,自动调整大小 问题是键盘视图的大小与它打开的应用程序的视图不匹配。它似乎有一些固定的大小,因为当我水平旋转模拟器时,我可以看到更多的宽度,而垂直时看到的更少 如何将其大小设置为放置在其中的根视图的宽度 以下是界面生成器和运行iPhone 5S的模拟器中键盘的外观:Ios 如何通过编程将视图大小添加到其父视图中?,ios,swift,autolayout,interface-builder,uistackview,Ios,Swift,Autolayout,Interface Builder,Uistackview,我正在使用自定义键盘,它有自己的视图,我在Interface Builder中编辑该视图 该视图在加载时以编程方式添加到键盘根视图。它包含堆栈视图,并填充整个视图,自动调整大小 问题是键盘视图的大小与它打开的应用程序的视图不匹配。它似乎有一些固定的大小,因为当我水平旋转模拟器时,我可以看到更多的宽度,而垂直时看到的更少 如何将其大小设置为放置在其中的根视图的宽度 以下是界面生成器和运行iPhone 5S的模拟器中键盘的外观: 您是否尝试实施这些通知 [[NSNotificationCenter
您是否尝试实施这些通知
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardFrameWillChange:)
name:UIKeyboardWillShowNotification
object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardFrameWillChange:)
name:UIKeyboardWillChangeFrameNotification
object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:)
name:UIKeyboardWillHideNotification
object:nil];
然后在调用这些通知时,将视图调整为键盘框架
CGRect keyboardFrame;
[[notification.userInfo valueForKey:UIKeyboardFrameEndUserInfoKey] getValue:&keyboardFrame];
CGRect viewFrame = keyboardFrame;
首先,我们需要从布局更改中获得一个钩子,我们可以这样做:
override var bounds: CGRect {
didSet {
print("Bounds have changed: \(bounds)")
}
}
这应该在自定义键盘视图中使用。接下来,我们要更新自定义键盘布局。看看你的屏幕截图,我们需要做的就是调整按键的高度和宽度,稍后你可以根据大小类的变化添加调整,从而对布局进行更多的控制。您将需要使用@IBOutlets
或通过迭代子视图并手动查找和更改宽度和高度约束来保留对高度和宽度约束的引用,这两种方法都可能很繁琐,但使用@IBOutlets
更容易
func updateKeys() {
DispatchQueue.main.async {
// Create array of width constraints
let widthConstraints: [NSLayoutConstraint] = widthArray()
widthConstraints.forEach { _ in /* change width constant for current layout */ }
// Create array of height constraints
let heightConstraints: [NSLayoutConstraint] = heightArray()
heightConstraints.forEach { _ in /* change height constant for current layout */ }
}
}
这只是一种方法,我发现使用自动布局时,总是有一种方法可以处理复杂的布局,但它应该向您显示一种可以使用的模式。请添加一些屏幕截图,以显示它现在的样子。这个问题被标记为Swift,而不是Objective-C。