2016-03-20 9 views
0

Dies kann eine ziemlich einfache Lösung, aber keiner der Vorschläge hier für mich arbeiten. Ich habe eine UIScrollView in einer UITableViewCell. Ich füge dynamische Bilder aus einer Liste in die Scrollansicht ein.Xamarin iOS - Passen scrollview den Inhalt in der Scrollview

public void InitViews() 
{ 
    scrollViewThumbNails.ContentSize = 
      new SizeF((float)scrollViewThumbNails.Frame.Size.Width/listCount * listCount, 
         (float)scrollViewThumbNails.Frame.Size.Height); 

    for (int i = 0; i < listCount; i++) 
    {          
     var imageView = new UIImageView 
     { 
      Frame = new RectangleF((float)i * (float)scrollViewThumbNails.Frame.Size.Width/listCount, 0, 
         (float)scrollViewThumbNails.Frame.Size.Width/listCount, (float)scrollViewThumbNails.Frame.Size.Height), 
      UserInteractionEnabled = true, 
      ContentMode = UIViewContentMode.ScaleAspectFit 
     }; 

     //call method to load the images 

     var index = i; 
     imageView.SetImage(
      url: new NSUrl(allItems[i].AbsoluteUri), 
      placeholder: UIImage.FromFile("placeholder.png"), 
      completedBlock: (image, error, type, url) => 
      { 
       //when download completes add it to the list 
       if (image != null) 
       { 
        allImages.Add(image); 

        scrollViewThumbNails.AddSubview(imageView); 
       } 
      }); 
    } 

fand ich einen Vorschlag hier, die den Inhalt Größe des Scroll einstellen Ratschläge, bezogen auf die Gesamtzahl der Subviews in ViewDidAppear wie folgt aus:

public override void ViewDidAppear (bool animated) 
{ 
    base.ViewDidAppear (animated); 

    CGRect contentRect = CGRect.Empty; 

    foreach(UIImageView view in scrollViewThumbNails.Subviews) 
    { 
     contentRect = CGRect.Union(contentRect,view.Frame); 
    } 

    scrollViewThumbNails.ContentSize = contentRect.Size; 
} 

Die imageViews noch angeordnet sind und tun, Beginnen Sie nicht am Bildschirmrand/Scrollview, wie in meinem Screenshot unten gezeigt. Ich möchte, dass das erste Bild immer am Ursprung des Scrollview positioniert ist und nicht den Abstand zwischen den einzelnen Bildern haben möchte. Wie kann ich die Bildlaufansicht basierend auf der Größe des Inhalts anpassen?

Kann mir jemand zeigen, was ich vermisse? Vielen Dank.

enter image description here

Antwort

0

fand ich hier eine Lösung, wo I die Gesamthöhe und Breite aller Ansichten berechnen, und weisen, daß als Inhaltsgröße der Bildlaufansicht in ViewDidLayoutSubviews:

Solution

public override void ViewDidLayoutSubviews() 
{ 
    base.ViewDidLayoutSubviews(); 

    try{ 

     float scrollViewHeight = 0.0f; 
     float scrollViewWidth = 0.0f; 

     foreach(UIImageView view in scrollViewThumbnails.Subviews) 
     { 
      scrollViewWidth += (float)view.Frame.Size.Width; 
      scrollViewHeight += (float)view.Frame.Size.Height; 
     } 

     scrollViewThumbnails.ContentSize = new CGSize(scrollViewWidth, scrollViewHeight); 
    } 
    catch(Exception ex) 
    { 
     Console.WriteLine(ex.Message+ex.StackTrace); 
    } 
}