2016-06-09 4 views
0

У меня есть UIImageView в раскадровке, в которую я храню UIImages из одного из двух источников - я либо загружаю изображение из сети, либо из локального каталога активов. Во всех случаях при обследовании изображения составляют 48x48; изображение выглядит 50x50. За исключением кода, который извлекает изображение (либо через Alamofire + AlamofireImage, либо UIImage: named), остальная часть кода идентична. Изображения при загрузке проверяются в lldb, 48x48 для обоих источников.Перемещение позиции UIImage в UIImageView

Поведение, которое я вижу, состоит в том, что изображения, загруженные из сети, отображаются правильно по центру изображения. Однако загруженные из каталога активов сдвигаются вправо и сдвигаются независимо от того, какой режим содержимого я задал в представлении изображения (я попробовал их все). Все локальное изображение сдвигается так, что левый край не выровнен по левому краю изображения - он находится примерно в центре. В качестве эксперимента я захватил одно из сетевых изображений и сохранил его в каталоге; он также был сдвинут при отображении, что привело меня к выводу, что проблема заключается не в самом изображении.

Мой вопрос: Что может быть разным в двух случаях - между 48x48 изображениями, которые я загружаю из сети с идентичными изображениями, загруженными из каталога активов, - что приводит к смещению локально загруженного изображения вправо?

Это код для загрузки из каталога активов:

image = UIImage(named: iconString) 

Я также попытался это:

image = UIImage(named: iconString)?.imageWithAlignmentRectInsets(UIEdgeInsetsMake(0, 0, 0, 9)) 

, но это не имело никакого значения.

Код Alamofire/AlamofireImage одинаково прост:

let request = Alamofire.request(.GET, url) 
    .validate() 
    .responseImage { response in completion?(result: response.result.value) } 

и, наконец, код, чтобы поместить изображение в UI, общие для обоих путей, является:

cell.imageView?.image = fcsts.first!.icon 

Эксперимент Я сделал захват файла и попытку его из каталога активов убедил меня, что содержимое файла не является проблемой (хотя я бы хотел, чтобы вас показали неправильно!) - что-то заставляет локально загруженное изображение быть смещенным в представлении ,

Приложение предназначено для iPhone. Я тестирую последний Xcode/iOS; приложение находится в Swift.

+0

С радостью помогите, если вы предоставили MCVE http://stackoverflow.com/help/mcve –

+0

Как ограничено UIImageView в пределах своего родителя? –

+0

Изображение представляет собой самый левый элемент горизонтального представления стека, ограниченный одинаковой высотой и левым краем.Я изо всех сил пытаюсь понять, как это может быть важно - не то, что это не очень хороший вопрос - просто потому, что единственная переменная, которую я могу найти, заключается в том, входит ли изображение из сети или поступает из каталога активов , Эксперимент, сохраняющий файл в сети и помещающий его в каталог активов, кажется, показывает, что это правда. Что касается MCVE, мне сложно отделить приложение от проверяемого в малой форме, но попытайтесь. – Feldur

ответ

0

Проблема заключается в функции автоматической компоновки, выполняемой ячейкой представления таблицы, как обсуждалось here. Я явно установить размер представления значка в моей раскадровке быть 50х50, так что это переопределение в классе ячейки таблицы исправлена ​​проблема для меня:

override func layoutSubviews() { 
    super.layoutSubviews() 
    if let rect = self.imageView?.frame { 
     var newRect = rect 
     newRect.origin = CGPointMake((50-rect.size.width)/2, (50-rect.size.height)/2) 
     self.imageView!.frame = newRect 
    } 
} 

У меня нет объяснения, почему копирования изображения из сети к локальный файл приводит к тому, что он подвергается перепозиционированию или почему ошибочное позиционирование находится только в горизонтальном направлении, несмотря на то, что все используемые размеры являются симметричными. (Да, он работает, только если я только отрегулирую положение X, а также регулировка Y - это просто паранойя.)

Смежные вопросы