我有一個包含文本視圖以及圖像瀏覽的單元格的tableview。我的項目目前正在使用AutoLayout。我的目標是讓圖像視圖在點擊時全屏顯示。一種選擇是使用模式視圖控制器,但我希望這種工作有點類似於在Facebook應用程序中的圖像敲擊工作,應用程序集中圖像並淡化背景。iOS自動佈局 - 將位於tableviewcell內部的視圖移動到屏幕中心
由於我使用自動佈局,我不能簡單地設置圖像視圖的框架來填充屏幕。相反,我需要使用自動佈局約束。我的圖像視圖有5個約束條件,約束條件設置單元格底部的距離,左側和右側,以及一個控制圖像高度的距離。最後一個是圖像視圖上方的textview和圖像頂部之間的垂直空間約束。雖然這看起來與高度和底部約束有衝突,但由於某種原因,接口生成器迫使我擁有這個。爲了避免出現問題,我將此約束的優先級設置爲小於1000(因爲tableview單元格的高度已設置,所以所有內容都完全適合),因此圖像不應該與textview重疊。
要將圖像居中,我將左右距離設置爲零,並刪除垂直空間約束。爲了使圖像居中,我將中心y對齊約束替換爲底部空間約束,而不是tableviewcell。我想讓它位於屏幕的中心,而不是單元格。
爲了讓我用這個主窗口:
AppDelegate* myDelegate = (((AppDelegate*) [UIApplication sharedApplication].delegate));
//access main window using myDelegate.window
然後,設置約束:
//currently sets the distance from the bottom of the cell to 14
//changing it...
[cellselected removeConstraint:cellselected.imagebottomspace];
cellselected.imagebottomspace = [NSLayoutConstraint constraintWithItem:cellselected.viewimage attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:myDelegate.window attribute:NSLayoutAttributeCenterY multiplier:0 constant:0];
[cellselected addConstraint:cellselected.imagebottomspace];
但是,這是行不通的。圖像視圖寬度和高度的變化適用得很好。然而,當讀取imagebottomspace約束時,我得到一個不可滿足的佈局 - 顯然約束與另一個約束相沖突,該約束將底部和圖像視圖之間的距離設置爲14,這是我剛剛刪除的約束。所以它似乎並沒有實際去除約束。
當我繼續並讓應用程序中斷某個約束時,imageview會移動,但會移動到錯誤的位置。它不是集中在屏幕上。它向上和向下移動屏幕。
顯然我在做什麼是不對的。我究竟做錯了什麼?
imageBottomspace是一個IBOutlet,用於在IB中創建一個約束嗎?另外,您看到了什麼行爲 - 是圖像的底部停留在哪裏? – rdelmar
@rdelmar查看我在上面的代碼中所做的更改。 – benjih555
@rdelmar imageBottomspace確實是一個IBOutlet – benjih555