Here\'s the code:
AVAssetExportSession *exporter = [[AVAssetExportSession alloc] initWithAsset:mixComposition presetName:AVAssetExportPresetHighestQuality];
This did the magic for me (iOS9, Swift 3, iPhone 6):
Based on: https://www.raywenderlich.com/94404/play-record-merge-videos-ios-swift
Changing mainComposition.renderSize to:
mainComposition.renderSize = CGSize(width: self.mainCompositionWidth, height: self.mainCompositionHeight)
where mainCompositionWidth, mainCompositionHeight are CGFloats and are calculated like this:
self.mainCompositionWidth = UIScreen.mainScreen().bounds.width
self.mainCompositionHeight = UIScreen.mainScreen().bounds.height
while (self.mainCompositionWidth%16>0) { // find the right resolution that can be divided by 16
self.mainCompositionWidth = self.mainCompositionWidth + 1.0
}
while (self.mainCompositionHeight%16>0) { // find the right resolution that can be divided by 16
self.mainCompositionHeight = self.mainCompositionHeight + 1.0
}
Also modifying scaleFitRatio in the videoCompositionInstructionForTrack function to:
scaleToFitRatio = self.mainCompositionWidth / assetTrack.naturalSize.height
This made the bottom green line disappear and the video fills the screen.