有一個問題:我設置了一個名爲ZHLockView的自定義視圖。我把它放在故事板上,我設置了約束條件。但我無法在- (id)initWithCoder:(NSCoder *)aDecoder
中得到正確的寬度,它總是320,我應該怎麼做才能獲得正確的寬度?iOS8 UIView寬度320
最後我知道在- (void)layoutSubviews
,我可以得到正確的寬度,但它會走兩次。有更好的主意嗎?
有一個問題:我設置了一個名爲ZHLockView的自定義視圖。我把它放在故事板上,我設置了約束條件。但我無法在- (id)initWithCoder:(NSCoder *)aDecoder
中得到正確的寬度,它總是320,我應該怎麼做才能獲得正確的寬度?iOS8 UIView寬度320
最後我知道在- (void)layoutSubviews
,我可以得到正確的寬度,但它會走兩次。有更好的主意嗎?
看,你得到寬度爲320,因爲你的視圖在故事板上的大小。
如果視圖的寬度等於superview,這實際上又等於設備的寬度,那麼您可以使用以下代碼隨時獲取視圖寬度,而不必擔心在哪裏編寫。
斯威夫特: -
CGFloat width = CGRectGetWidth(UIScreen.mainScreen.bounds);
CGFloat height = CGRectGetHeight(UIScreen.mainScreen.bounds);
Objective-C的: -
CGFloat width = CGRectGetWidth([[UIScreen mainScreen] bounds]);
CGFloat height = CGRectGetHeight([[UIScreen mainScreen] bounds]);
希望你明白,它可以幫助你.. :)
視圖將被負載在第一次啓動時xib中的值,接下來當自動佈局引擎進行第一次啓動時,它將被設置爲根據約束條件設置新的值。
爲什麼你需要知道尺寸? Autolayout是不關心它。
-layoutSubviews
,-viewWillLayout
,-viewDidLayout
在佈局引擎需要更新時調用,這可能意味着在顯示視圖之前的不同時間。
因爲在.m文件中,我使用了一些'for'語句,比約束條件更方便 –
如果您使用autolayout,則必須手動更改幀,您應該只更改約束。即使它現在似乎正在工作,它應該在iOS – Andrea
的代碼是在這裏
objc
#define KScreenWidth [UIScreen mainScreen].bounds.size.width
CGFloat height = 0;
CGFloat margin = (KScreenWidth - columnCount * btnW)/(columnCount + 1);
for (int i = 0; i < btnCount; i++) {
int row = i/columnCount;
int column = i % columnCount;
CGFloat btnX = margin + column * (btnW + margin);
CGFloat btnY = row * (btnW + margin);
height = btnH + btnY;
ZHButtonView *button = [[ZHButtonView alloc] initWithFrame:CGRectMake(btnX, btnY, btnW, btnH)];
button.userInteractionEnabled = NO;
button.currentIndex = i;
[button setBackgroundImage:[UIImage imageNamed:@"gesture_node_normal"] forState:UIControlStateNormal];
[button setBackgroundImage:[UIImage imageNamed:@"gesture_node_highlighted"] forState:UIControlStateSelected];
[self addSubview:button];
}
的不同次要版本之間斷開好吧,您的代碼與視圖的框架沒有關係。我想你可以在viewDidLoad中調用它。它應該工作正常。 – Tejvansh
你所說的 「正確的寬度」 是什麼意思?你期望什麼寬度?你有什麼限制? – Caleb
這個視圖還沒有在'initWithCoder:'中進行佈局,所以它只會有你在故事板中給出的框架。獲得正確寬度的最佳位置取決於您試圖用它做什麼。 – dan
主要限制是寬度等於superView.width。我想在不同的設備中獲得正確的寬度 –