Actualizar dinámicamente la posición de UILabel en UIView depende de su valor de texto

Estoy obteniendo estos valores de la web. Esta pantalla si todos los valores provienen de la web que se ve bien.

Y en ausencia de datos, parece lo siguiente.

Usé este código

//Purchasae info
    {
        NSInteger heightToDecrease = 0;
        NSInteger heightToIncrease = 0;
        // NSInteger LABEL_HEIGHT = 18;

        maximumSize = CGSizeZero;
        textSize = CGSizeZero;

        //purchaseCostLabel
        heightToDecrease += self.PurchsCostHeightConstrains.constant;
        maximumSize = CGSizeMake(self.purchaseCostLabel.frame.size.width, 999);
        textSize = [UtilityHandler textSizeOfString:self.purchaseCostLabel.text font:self.purchaseCostLabel.font maxSize:maximumSize];
        NSInteger purchaseCostLabelHeight = textSize.height+SPACE_PADDING;
        self.PurchsCostHeightConstrains.constant = purchaseCostLabelHeight;
        totalHeightToIncrease += self.PurchsCostHeightConstrains.constant;

        //insurance
        heightToDecrease += self.insuranceHeightConstraints.constant;
        maximumSize = CGSizeMake(self.purchaseInsuranceLabel.frame.size.width, 999);
        textSize = [UtilityHandler textSizeOfString:self.purchaseInsuranceLabel.text font:self.purchaseInsuranceLabel.font maxSize:maximumSize];
        NSInteger insCostLabelHeight = textSize.height+SPACE_PADDING;
        self.insuranceHeightConstraints.constant = insCostLabelHeight;
        totalHeightToIncrease += self.insuranceHeightConstraints.constant;

        //shipping
        heightToDecrease += self.shippingHeightConstarants.constant;
        maximumSize = CGSizeMake(self.shippingLabel.frame.size.width, 999);
        textSize = [UtilityHandler textSizeOfString:self.shippingLabel.text font:self.shippingLabel.font maxSize:maximumSize];
        NSInteger shippingLabelHeight = textSize.height+SPACE_PADDING;
        self.shippingHeightConstarants.constant = shippingLabelHeight;
        totalHeightToIncrease += self.shippingHeightConstarants.constant;

        //conservation
        heightToDecrease += self.conserVHeightConstraints.constant;
        maximumSize = CGSizeMake(self.conservationLabel.frame.size.width, 999);
        textSize = [UtilityHandler textSizeOfString:self.conservationLabel.text font:self.conservationLabel.font maxSize:maximumSize];
        NSInteger conserLabelHeight = textSize.height+SPACE_PADDING;
        self.conserVHeightConstraints.constant = conserLabelHeight;
        totalHeightToIncrease += self.conserVHeightConstraints.constant;
        //storage
        heightToDecrease += self.storageHeightConstraints.constant;
        maximumSize = CGSizeMake(self.storageLabel.frame.size.width, 999);
        textSize = [UtilityHandler textSizeOfString:self.storageLabel.text font:self.storageLabel.font maxSize:maximumSize];
        NSInteger storagLabelHeight = textSize.height+SPACE_PADDING;
        self.storageHeightConstraints.constant = storagLabelHeight;
        totalHeightToIncrease += self.storageHeightConstraints.constant;
        //Frameing
        heightToDecrease += self.framingHeightConstraints.constant;
        maximumSize = CGSizeMake(self.shippingLabel.frame.size.width, 999);
        textSize = [UtilityHandler textSizeOfString:self.shippingLabel.text font:self.shippingLabel.font maxSize:maximumSize];
        NSInteger framLabelHeight = textSize.height+SPACE_PADDING;
        self.framingHeightConstraints.constant = framLabelHeight;
        totalHeightToIncrease += self.framingHeightConstraints.constant;

        // set content view height constraint
        self.purchaseInformationViewHeightConstraint.constant -= heightToDecrease;
        // set content view height constraint
        self.purchaseInformationViewHeightConstraint.constant += heightToIncrease;


    }

Entonces, ¿cómo actualizo el marco de etiquetas para que, si alguna etiqueta puede tomar posiciones en blanco?

Respuestas a la pregunta(1)

Su respuesta a la pregunta