Xcode - Bir bileşeni çerçevesini kaybetmeden bir görünümden diğerine sürüklemenin bir yolu var mı?


91

Yapmak istediğim şey, çerçeve / konumu sıfırlanmadan, bir bileşeni / görünümü bir denetim görünümünden diğerine Xcode'un arayüz oluşturucusunda sürüklemektir.

Bunu yaparken Xcode'un varsayılan davranışı, boyutlarını korurken yeni gözetim görünümünde dikey ve yatay olarak taşınan görünümü ortalamak gibi görünür. Görünümün yeni denetim görünümünde manuel olarak yeniden konumlandırılması gerektiği anlamına geldiğinden, bu son derece sinir bozucu. Ama onu taşımadan önce doğru şekilde konumlandırmıştım, bu yüzden Xcode'un sadece genişliği / yüksekliği yerine çerçevesinin tüm özelliklerini hatırlamasını istiyorum. Mümkün mü?


Geçmişte zamanında kesip yapıştırırsanız çerçeve aynı kalır. Deneyin ve görün.
David H

Öneriniz için teşekkürler, maalesef işe yaramıyor. Ya da sadece yanlış kesiyorum / yapıştırıyorum. Olan şey, XCode'un yapıştırmaya çalıştığım görünümü yapıştırdığım görünümle değiştirmesidir (ve aynı anda birden fazla şeyi yapıştırmaya çalışırsam, listedeki ilk öğeyi kullanır). Kopyala aynı şeyi yapar.
aroth

Sol taraftaki sütuna - listeye yapıştırmayı deneyin. Süper görünümü seçin ve ardından yapıştırın. Aksi takdirde, özür dilerim, önerilerimiz kalmadı.
David H

Her iki yolu da denedim. Çalışmıyor. Zor yoldan yapmak zorunda kaldı.
Temmuz'12

Stackoverflow.com/questions/12034293/… adresinde bir geçici çözüm var gibi görünüyor ama bu pek iyi değil
Eugene Osovetsky 19'12

Yanıtlar:


224

Başka bir çözüm:

  1. Alt görünümünüzde olmasını istediğiniz öğeleri seçin, ardından
  2. (araç çubuğunda) Düzenleyici> Yerleştir> gömmek için görünüm türü.

12
Teşekkürler. Kabul edilen cevap bu olmalıdır. Yeni bir süper görünüme taşımak istediğiniz tüm görünümleri seçin -> görünüme katıştır -> yeni konteyner görünümünü istenen süper görünüme taşıyın -> düzenleyici - birleştirilmemiş. Voila! Tüm görünümler, doğru çerçevelerle yeni denetim görünümündedir.
Accatyyc

18
Herhangi bir otomatik düzen kısıtlamasının kopyalanmaması çok kötü, gördüğüm tek yol xib'in xml'sini
James

1
Hala tuhaf olan bir şey, alt görünümlerimi yeni süpervizyonlarına yerleştirdiğimde, süpervizörün garip koordinatlara sahip olmasıdır. -20 x ve -20 y ile başlar ve sonra 0,0 olarak ayarlarsam her şey merkezin dışında olur.
user3344977

1
@ James bunu yapardım. Ancak, Xcode 6'da Command-X_Command-V görünümleri kullanırsanız, yapıştırılan görünümler arasındaki kısıtlamalara uyulduğunu buldum. Küçük gelişme.
Steven Kramer

4
@StevenKramer Command-X ve Command-V ile denedim, bende çalışmadı. Bunu yapmak için başka adımlarınız var mı? İlgileniyorum
arh

28

Size yardımcı olabilecek bir şey buldum çocuklar!

Görev, "alt görünümleri" "üst görünüm" olarak yeniden gruplandırarak hiyerarşik olarak üst görünümün alt öğeleri haline gelmeleri ve eylemden önceki gibi ekrandaki fiziksel konumları korumalarıdır.

İlk olarak, üst öğe görünümünü fiziksel olarak alt görünümlerin alanını kapsayacak şekilde ayarlayın. İkinci olarak, tüm çocukların görünüm listesinde altta olduğundan emin olun.

Şimdi tüm çocukları fareyle seçin ve onları örneğin bir piksel yukarı ve bir piksel aşağı hareket ettirin (sadece IB demek için biraz değişiklik var). Bundan sonra çocuklar ve onlar sihirli bir şekilde ebeveynin çocukları olacaklar ve pozisyonlarını sergilemeye devam edecekler.

Benim için OSX 10.8.2 ve Xcode 4.6'da çalışıyor.

İyi şanslar!


Harika ... Bu, çıkışları ve çerçeveleri bile kırmaz. Görünüm sonları çerçevelerine göm. Kes yapıştır yöntemi, çıkışları ve çerçeveleri kırar.
jeet.chanchawat

22

Eşyaları yeniden konumlandırmak için çok zaman kazanmayı başardım ve bunu yaptım:

  1. Arayüz Oluşturucu'da üst öğe görünümü, muhtemel alt görünümlerle aynı seviyeye ekleyin.
  2. Film şeridini bir metin düzenleyicide açın ve olası alt görünümleri üst görünümün alt görünüm etiketleri içine kopyalayın. XCode, kaydettiğinizde güncellenecek.

Yine de çok zarif değil, XCode'un neden Shift ile desteklemediğini anlayamıyorum.


3
Bu, Xcode 5'te sürekli benim için sorunsuz çalışan tek cevaptır. "Editor-> Embed In" doğru cevap olmalı gibi görünüyor, ancak alt görünümleri taşımak istediğim görünümü her zaman listelemiyor.
Denton

10
  1. Bir UIView'den başka bir UiView'e (çocuk olamaz) veya ScrollView'a taşımak istediğiniz tüm kontrolleri seçin

  2. Kes kopyala

  3. Şimdi yeni UIView / ScrollView'ı mevcut UIView'unuza sürükledikten sonra, seçmek için bir kez tıklamayın, bunun yerine yeni UIView / ScrollView'a ÇİFT tıklayın ve tüm kontrolleri yapıştırın.

  4. Mesafe farkı tüm kontroller arasında aynı kalacaktır, ancak kontrolleri yeniden konumlandırmanız gerekebilir. Bu yüzden, bunları yeniden konumlandırana kadar herhangi bir yere tıklamayın, tüm kontrolleri zaten seçili olduğu için gezinme oklarıyla yeniden konumlandırın veya bunları tekrar seçmeniz gerekebilir.

NOT: XCode 4.2 kullanıyorum


Hey, bu işe yararsa buradaki en iyi cevap bu (birden fazla kontrolü mevcut bir görünüme sürüklemek için)
Colin

Xcode 4.6.2'de @me, üzerine çift tıklayarak ikincil bir görünüm penceresi açmak mümkün değildir, bu nedenle bu yöntem çalışmaz.
Colin

Xcode 5'te sorunsuz çalışır. Göreli konumlandırma aynı kalır, yalnızca dikey konumlandırma kapalıdır, ancak bu, tüm grubu tek seferde yeniden konumlandırmak için yeterince kolaydır.
qix

kötü olan şey, otomatik düzen kısıtlamalarınızı kaybetmenizdir: '( indiestack.com/2013/12/transplanting-constraints burada "nakil" kısıtlamalarının yolunu bulabilirsiniz
Joan Cardona

4

Bir storyboard kullanmadan Stepan'ın çözümüne benzer bir şey yaptım. IB'de ViewController'ın görünümü açıkken:

  1. VC'nin ana görünümüne ek olarak başka bir görünüm oluşturun
  2. Tüm alt görünümleri bir görünümden diğerine sürükleyerek ikinci görünüme taşıyın (sol taraftaki listeden sürüklemek konumlarını sıfırlar) Eğer bunları farenizi kullanarak IB'den seçemiyorsanız, sol taraftaki listeden tümünü seçin, ardından "cmd" düğmesini kullanarak IB panelinden son bir alt görünüm seçin.
  3. Onları ilk ana görünümde son görünüme geri götürün.
  4. Eklenen görünümü kaldırın, tüm set.

2

Alt görünümleri başka bir görünüme kopyalamak ve konumları korumak için en iyi çözüm budur:

  1. Alt görünümünüzde olmasını istediğiniz öğeleri seçin, ardından
  2. Düzenleyici -> Yerleştir -> Görünüm
  3. Bu Görünümü Kopyala (Cmd + C)
  4. Geri al (Cmd + Z) (Alt görünümleri istediğiniz için)
  5. Alt görünümleri istediğiniz görünüme gidin ve yapıştırın (Cmd + V)
  6. Kopyalayıp yapıştırdığınız Gömme Görünümünü seçin ve Düzenleyici -> Gömülü Kaldır

6. Adım, gömme görünümünü kaldırır ve yalnızca alt görünümleri kopyaladınız.


2

Xcode Interface Builder, bir Üst Görünüm sürüklenip başka bir Görünüme (UIView, ScrollView, StackView) bırakıldığında karışıklık yaratır

S:
Bir Görünümü (içinde diğer birçok alt görünümü içeren) bir ScrollView'a veya başka bir üst düzey görünüme gömmek, şimdiye kadar gördüklerimle basit değil. Kısa süre sonra olan şey, tüm alt görünümlerin orijinal çerçevelerini bulamadığı için yanlış yerleştirilmiş gibi görünmesidir.

Y:
Aşağıdaki adımları izleyin ve sorunu olabildiğince kolay çözebileceksiniz:

  1. Alt görünümünüzde olmasını istediğiniz öğeleri seçin, ardından
  2. Menü çubuğuna gidin, Düzenleyici -> Yerleştir -> Görünüm
  3. Bu yeni Görünümü (Cmd + C) alt görünümlerle birlikte kopyalayın (benim için şu anda tüm kısıtlamalar bu noktada şu ana kadar korunmuştur)
  4. Alt görünümlerin içinde olmasını istediğiniz görünüme gidin (bu bir ScrollView veya StackView olabilir) ve kopyalanan görünüme yapıştırın (Cmd + V)
  5. Yapıştırılmış Gömme Görünümünü (daha önce yeni oluşturduğunuz) seçin ve Xcode, Editor -> Unembed menü çubuğuna gidin.

Hayır, henüz bitmedi! Bazen, UI Kısıtlaması ile ilgili daha az sayıda sorun yaşayabilirsiniz, bunları uygun şekilde çözmeniz gerekir.


1

Başka bir yaklaşım tespit ettim. Temelde: Taşı = Kes + Yapıştır

Bu şekilde yaparsınız:

  • tüm alt görünümlerinizin yeni ebeveyn görünümünün (P ') alt öğeleri olmasını sağlayın
  • Auto-Layout tabanlı Storyboard'da (neredeyse) tüm kısıtlamalarınızı koruyun
  • alt görünümünüzün göreceli konumlarını (çerçevelerini) birbiriyle koruyun

Bu şekilde şunları yapmazsınız:

  • Storyboard dosyasını bir metin düzenleyicide düzenle

Temel olan şey, Storyboard'daki bir (kök) hariç her görünümün ana görünümüne sahip olmasıdır . Daha sonra, birden çok alt görünümü kopyaladığınızda / taşıdığınızda, çerçeveleri ve kısıtlamaları kaybedersiniz .

Cevabı oldukça basit. Alt görünümlerinizin (SV'ler) üst görünümlerini (P) yeni ana görünüme (P ') kopyalayarak bir kopyasını oluşturursunuz. Bu şekilde, yalnızca bu üst yeni görünümden (P ') yeni üst görünümüne kısıtlamaları yeniden oluşturmanız gerekebilir, ancak taşımak istediğiniz her alt görünüm için değil.

Üst görünümün (P) kopyasını yenisine (P ') yaptıktan sonra, bu yeni görünümden (P'):

  • taşımak istedikleriniz dışındaki tüm çocukları kaldırın
  • yeni üst (P ') kısıtlamalarını yeniden oluştur
  • olası Arabirim Oluşturucu çıkışlarını (SV'ler) için yeniden oluşturun

Ve orijinal ebeveyn görünümünden (P) siz:

  • taşımak istediğin tüm çocukları kaldır

Önce:

Görüntüle1

Görünüm2

P

Taşımak istediğiniz SV'ler

Taşınmak istemeyen SV'ler

Görüntüle3

Sonra:

Görüntüle1

Görünüm2

P

Taşınmak istemeyen SV'ler

Görüntüle3

P '

Taşımak istediğiniz SV'ler

Örneğin, bir üst görünüm olarak UIScrollView'a sahipseniz, bunun iyi bir genelleme yapmadığını vurgulamalıyım. Daha sonra bunun bir kopyası tekrar bir UIScrollView olabilir ve istenmeyebilir.

Başka bir şey de, orijinal üst görünümdeki (P) bazı alt görünümleri (SV'ler) kaldırdığınızda, diğer (taşınamayan alt görünümler) bunlara referans veriyorsa bazı kısıtlamaları yeniden oluşturmanız gerekebilir. Ama yine de yapmalısın.


0

Bu sorunu çözmeme yardımcı olan şey ...

  1. Kök düzeyinde xib'de istenen ana görünümü (kaydırma görünümü veya uiview) oluşturun ve buna göre yeniden boyutlandırın
  2. Bu üst görünümün alt görünümleri olmasını istediğiniz tüm görünümleri kopyalayın ve 1. adımda oluşturduğunuz yeni görünüme yapıştırın.
  3. Bu noktada, bu görünümleri çoğaltmış olacaksınız. Yeni eklenen görünümler yanlış hizalanmış olabilir, ancak yine de aynı sırada ve birbirlerine göre aynı mesafede, sınırlarını aynı görünümün eski kopyalarıyla eşleştirmek için xib'de hizalayın (Bu, yeni ana görünümün eskisi ile aynı sınırlara sahiptir)
  4. Yeni eklenen görünümler bazı kısıtlamaları kaybedecek, bunları düzeltmek için eski görünümlere bakın.
  5. Xib'den eski görünümleri silin
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.