2016-09-26 63 views
0

我正在使用自己的视图在Interface Builder中编辑的自定义键盘上工作。如何以编程方式向其父视图添加视图大小?

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

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

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

下面是键盘的外观在Interface Builder和运行iPhone 5S模拟器:

sizes

+1

请添加一些截图以显示它现在的样子。 –

回答

-2

你尝试实施这些通知?

[[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; 
+0

此问题标记为Swift,而不是Objective-C。 – Moritz

0

首先,我们需要得到一个勾成从布局的变化大小的变化,我们可以做到这一点,像这样:

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 */ } 

    } 
} 

这仅仅是一个做的方式,我发现,支持自动布局总是有一说一,布局复杂的做这件事的方式,但它应该告诉你,你可以使用一种模式。

相关问题