2016-09-26 91 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 */ } 

    } 
} 

這僅僅是一個做的方式,我發現,支持自動佈局總是有一說一,佈局複雜的做這件事的方式,但它應該告訴你,你可以使用一種模式。