If you can add the label via the interface builder it will save writing a lot of the label attribute code, though from what you've described, if you use the code below (substituting your desired position, size and text values) then this label will change according to the content you populate it with. I use it all the time, works perfectly.
UILabel *label = [[UILabel alloc] initWithFrame:GCRectMake(0,0,300, 50)]; //these values to be changed to reflect where you want the label to appear, initial position and size, width etc.
//setting up the label attributes etc
label.numberOfLines = 0; //This means there's no limit to lines of text.
label.font = [UIFont systemFontOfSize:13];
label.textColor = [UIColor blackColor];
NSString *content = YOUR_TEXT;// your example @"jklljk sdkhfdjkdsfjhkfk fhs fdh fk dksdks dfss s dfs dfs fsdkdfks dfks dfks df k dfh";
CGSize maximumLabelSize = CGSizeMake(300, 1000); //For example - the height can be changed to any maximum value.
NSDictionary *stringAttributes = [NSDictionary dictionaryWithObject:[UIFont systemFontOfSize:13] forKey: NSFontAttributeName]; //This allows a calculation to be made of the space taken up, so if you're using a custom or large font it will calculate accordingly.
CGSize newExpectedLabelSize = [content boundingRectWithSize:maximumLabelSize options:NSStringDrawingTruncatesLastVisibleLine|NSStringDrawingUsesLineFragmentOrigin attributes:stringAttributes context:nil].size;
CGRect frame = label.frame;
frame.size.height = newExpectedLabelSize.height;
label.frame = frame; //This last line should change the height of your label according to what it needs to be to have all the text visible and over multiple lines.
I hope this helps you with what you're looking for.
(This replaces the need for any of the constraint coding you had too.)
Cheers, Jim