У меня проблема с представлением изображения. Я динамически добавляю свой список прокрутки. Я использую iOS 8 и классы классов и автомат. Скроллвью был добавлен через раскадровку, и я также добавил ограничения, соответствующие размеру представления.Xamarin iOS - UIImageView внутри UIScrollView, перемещенный после изменения ориентации
Задача состоит в том, чтобы динамически добавленное изображение просматривалось с центром, но после изменения ориентации оно перемещается в пределах прокрутки.
Есть тонны решений здесь, и большинство из них указали на переопределение ViewWillLayoutSubviews() функции и затем установить центр в UIImageView в к Scrollview там. Ни одно из предложений не помогло мне. Всякий раз, когда я поворачиваю устройство, изображение просматривается.
Некоторые предложения я попытался
UIScrollView with centered UIImageView, like Photos app
Center UIImageView inside UIScrollView without contentInset?
Вот как я добавляю в UIImageView. Эта функция вызывается в ViewDidLoad().
public void AddImageInScrollView(int index)
{
try
{
//Setting up the imageView
var imageUrl = Items.fetchImages[index];
//Setting up the imageView
imageView = new UIImageView();
//call method to load the images
imageView.SetImage(
url: new NSUrl(imageUrl.AbsoluteUri),
placeholder: UIImage.FromFile("sample.png"),
completedBlock: (image, error, type, url) =>
{
imageResizer = new ImageResizer(image);
imageResizer.RatioResize(100,100);
UIImage resizedImage = imageResizer.ModifiedImage;
//when download completes add it to the list
Car.images.Add(resizedImage);
});
//end method call
imageView.UserInteractionEnabled = true;
imageView.ContentMode = UIViewContentMode.ScaleAspectFit;
imageView.Center = ScrollViewMain.Center;
//Adding the imageView to the scrollView as subView
ScrollViewMain.AddSubview(imageView);
//ScrollViewMain.ContentSize = imageView.Image.Size;
ScrollViewMain.ContentSize = new CGSize(ScrollViewMain.Frame.Size.Width,ScrollViewMain.Frame.Size.Height);
catch (Exception ex)
{
Console.WriteLine(ex.Message + ex.StackTrace);
}
}
Функция ViewWillLayoutSubviews
public override void ViewWillLayoutSubviews()
{
base.ViewWillLayoutSubviews();
imageView.Frame = new CGRect(0,0,ScrollViewMain.Frame.Size.Width,ScrollViewMain.Frame.Size.Height);
CenterScrollViewContents();
}
В CenterScrollViewContents функционируют
public void CenterScrollViewContents()
{
try
{
var boundsSize = ScrollViewMain.Bounds.Size;
var contentsFrame = imageView.Frame;
if (contentsFrame.Size.Width < boundsSize.Width) {
contentsFrame.X = ((float)boundsSize.Width - (float)contentsFrame.Size.Width)/2.0f;
} else {
contentsFrame.X = 0.0f;
}
if (contentsFrame.Size.Height < boundsSize.Height) {
contentsFrame.Y = ((float)boundsSize.Height - (float)contentsFrame.Size.Height)/2.0f;
} else {
contentsFrame.Y = 0.0f;
}
imageView.Frame = contentsFrame;
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
экран образец выстрел из того, что он выглядит как после вращения
Вы не обновляете ContentSize ScrollView. Я бы предположил, что это проблема. –
Я уже делаю это в функции AddImageToScrollView, которая вызывается в ViewDidLoad(). //ScrollViewMain.ContentSize = imageView.Image.Size; ScrollViewMain.ContentSize = новый CGSize (ScrollViewMain.Frame.Size.Width, ScrollViewMain.Frame.Size.Height); – naffie
Да, но не в обновлении 'ViewWillLayoutSubviews'. Просто попробуйте скопировать 'ScrollViewMain.ContentSize = новый CGSize (ScrollViewMain.Frame.Size.Width, ScrollViewMain.Frame.Size.Height);' для этой функции. –