Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/105.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_Interface Builder_Uistackview - Fatal编程技术网

Ios 如何通过编程将视图大小添加到其父视图中?

Ios 如何通过编程将视图大小添加到其父视图中?,ios,swift,autolayout,interface-builder,uistackview,Ios,Swift,Autolayout,Interface Builder,Uistackview,我正在使用自定义键盘,它有自己的视图,我在Interface Builder中编辑该视图 该视图在加载时以编程方式添加到键盘根视图。它包含堆栈视图,并填充整个视图,自动调整大小 问题是键盘视图的大小与它打开的应用程序的视图不匹配。它似乎有一些固定的大小,因为当我水平旋转模拟器时,我可以看到更多的宽度,而垂直时看到的更少 如何将其大小设置为放置在其中的根视图的宽度 以下是界面生成器和运行iPhone 5S的模拟器中键盘的外观: 您是否尝试实施这些通知 [[NSNotificationCenter

我正在使用自定义键盘,它有自己的视图,我在Interface Builder中编辑该视图

该视图在加载时以编程方式添加到键盘根视图。它包含堆栈视图,并填充整个视图,自动调整大小

问题是键盘视图的大小与它打开的应用程序的视图不匹配。它似乎有一些固定的大小,因为当我水平旋转模拟器时,我可以看到更多的宽度,而垂直时看到的更少

如何将其大小设置为放置在其中的根视图的宽度

以下是界面生成器和运行iPhone 5S的模拟器中键盘的外观:


您是否尝试实施这些通知

[[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。