2017-03-05 2 views
0

ich sechs imageviews haben, und ich setzte sie wie folgt aus:removeFromSuperview Funktion funktioniert nicht fein

img1 img2 img3 img4 img5 img6 

aber wenn ich entfernen img1 durch removeFromSuperview andere Funktion imageviews mit Fund nicht angezeigt wird. zum Beispiel, wenn ich img1, andere imageviews erscheinen auf einander entfernt:

img23456 

Ich will nicht hide Funktionen verwenden, da ein Raum zwischen ihnen erscheinen wird. wenn ich zum Beispiel entfernen img1:

' ' img2 img3 img3 img4 img5 img6 

auf anderer Seite, was ich will, ist, wenn img1 entfernt (ohne ersten Raum):

img2 img3 img3 img4 img5 img6 

mein Layout:

enter image description here

aktualisiert

mein Code

:

if(self.job.wifi == "1") 
    { 
        self.img_option_1.isHidden = false 
     self.img_option_1.image = UIImage(named: "wififree") 

    }else{ 
     self.img_option_1.removeFromSuperview() 
    } 

    if(self.job.apple_health == "1") 
    { 
     self.img_option_2.isHidden = false 
     self.img_option_2.image = UIImage(named: "sib_noghrei") 
    }else{ 
     // self.img_option_2.removeFromSuperview() 
     self.img_option_2.removeFromSuperview() 
    } 

    if(self.job.wc == "1") 
    { 

     self.img_option_3.isHidden = false 
     self.img_option_3.image = UIImage(named: "wc") 
    }else{ 
     self.img_option_3.removeFromSuperview() 
    } 

    if(self.job.full_time == "1") 
    { 
     self.img_option_4.isHidden = false 
     self.img_option_4.image = UIImage(named: "fulltime") 
    }else{ 
     self.img_option_4.removeFromSuperview() 
    } 


    if(self.job.pos == "1") 
    { 

     self.img_option_5.isHidden = false 
     self.img_option_5.image = UIImage(named: "pos") 
    }else{ 
     self.img_option_5.removeFromSuperview() 
    } 

    if(self.job.parking == "1") 
    { 
     self.img_option_6.isHidden = false 
     self.img_option_6.image = UIImage(named: "parking") 
    }else{ 
     self.img_option_6.removeFromSuperview() 
    } 
+0

Welche Sprache ist das, Swift? Wie hast du 6 UIImageViews wie folgt hinzugefügt: img1 img2 img3 img4 img5 img6? Wenn ich das in Swift schreibe, füge ich 6 UIImageViews so hinzu? –

+0

meine Sprache ist 'swift'. –

+0

@ S.M_Emamian Um es Ihnen leichter zu machen und zu verstehen, was Sie tun, fügen Sie Ihren Code statt img 1 img 2 img 3 img 4 ... Im Moment wird niemand verstehen, was Sie versuchen zu tun und was das Problem ist. Vielleicht können Sie auch Bilder hinzufügen, was mit der Benutzeroberfläche passiert. –

Antwort

3

Das Problem ist also, wenn Sie img1UIImageView von Ihrem superview entfernen. Ihre Einschränkungen für den Rest der UIImageViews, die mit dem entfernten verbunden sind, werden fehlschlagen, weil sie an img1UIImageView angeschlossen sind.

Hart Lösung: Sie müssen/connect/fügen Sie Ihre Einschränkungen für jeden UIImageView, wenn man etwas in der „Kette“ von superview von Code entfernt werden soll.

Bessere Lösung: (Best Practice)

Entfernen Sie alle Ihre UIImageViews und einen einzigen UICollectionView hinzuzufügen.

ein UIImageView zur Zelle hinzufügen und einfach delete oder add Zellen, wie Sie wollen, und die UICollectionView wird behandeln alle das Layout für Sie.

+1

Noch bessere Lösung (und tatsächliche Best Practice), verwenden Sie 'UIStackView', die für statische Inhalte einfacher zu verwenden ist. – deadbeef

+0

Wie man es schnell macht: Entferne alle Einschränkungen in deinen Bildansichten, wähle alle imageViews aus und führe Editor -> Einbetten in -> Stapelansicht aus. – deadbeef

+0

@deadbeef Großartig, um eine weitere Option als UIStackView hinzuzufügen. UIStackView unterstützt jedoch ** iOS 9.0 **>, daher gilt :, etwas "" tatsächliche Best Practice "aufzurufen, das nur eine Version in der Historie unterstützt, ist ** keine gute Praxis ** und auch nicht. Es heißt eine Option. –

0

@ sneaks Antwort ist der Standard Weg, um dieses Problem zu lösen.

Ich habe noch eine Idee zu teilen, die ich in meiner App verwendet habe.

Machen Sie das spacingconstraints als multipliedconstant der unmittelbaren linken UIImageView.

Dann nehmen Sie die IBOutlet der widthconstraint von img's. Dann ändern Sie Ihr anderes Teil so ->

else{ 
     widthImg1.constant = 0 
} 

Jetzt wird der Abstand auch Null, weil es eine multiplizierte Konstante ist.

+0

Ich hatte 2 Lösungen in meiner Antwort, und die Aktualisierung Einschränkungen war einer von ihnen :) Jedoch. gute Arbeit, die Sie mit Code und Erklärung dafür ausführlich beschrieben haben! Wir werden dich dafür auffordern. –

+1

Danke für die Bearbeitung. Ich werde mir die Qualität meiner Antwort in Zukunft merken. – Naresh

Verwandte Themen