2014-04-26 3 views
22

क्या UISegmentedControl के कोने त्रिज्या को बदलना संभव है? मैंने निम्नलिखित दृष्टिकोण को आजमाया है जिसका उपयोग हम UIView के कोने त्रिज्या को बदलने के लिए करते हैं।UISegmentedControl के कोने त्रिज्या को कैसे बदलें?

self.segmentedControl.layer.cornerRadius = 15.0; 
    self.segmentedControl.layer.masksToBounds = YES; 

यह काम नहीं किया क्योंकि आप इसे केवल यूआईसेजेन्टेड कंट्रोल के कोने में कटौती कर सकते हैं। enter image description here

धन्यवाद!

उत्तर

66

यह काम करना चाहिए:

self.segmentedControl.layer.cornerRadius = 15.0; 
self.segmentedControl.layer.borderColor = [UIColor whiteColor].CGColor; 
self.segmentedControl.layer.borderWidth = 1.0f; 
self.segmentedControl.layer.masksToBounds = YES; 

कोनेराइडस सेट करने के बाद आपको सीमा निर्दिष्ट करने की आवश्यकता है।

+0

यह सही समाधान है! – rushelmet

+1

यह केवल तभी काम करता है जब आप कोनेराइडस –

+4

को बढ़ाना चाहते हैं, यह केवल कोनों को काटने के साथ प्रारंभिक समस्या को ठीक नहीं करता है। नीचे मेरा जवाब देखें। स्विफ्ट के लिए –

8

सेगमेंट नियंत्रण अपने कोनों को खींचने के तरीके को बदलने वाला नहीं है, इसलिए यह अपने कोनों को अपने तरीके से खींच रहा है और फिर आप उन्हें काट रहे हैं। आप इस बात का प्रभारी नहीं हैं कि सेगमेंट नियंत्रण किस सीमा के आकार को खींचता है। यदि आप वास्तव में जिस तरह से तैयार नहीं हैं उसे पसंद नहीं करते हैं, तो आपको स्क्रैच से अपना खुद का विकल्प नियंत्रण बनाना होगा। निकटतम आप कानूनी रूप से उस चीज़ पर आ सकते हैं जिसे आप करने की कोशिश कर रहे हैं सेगमेंट नियंत्रण की पृष्ठभूमि छवि सेट करना है।

4

आपका परिणाम इसलिए है क्योंकि कुछ अन्य (कस्टम ड्राइंग?) सीमा को नियंत्रित करता है और परत नहीं। सौभाग्य से ऐसा लगता है कि परत सेटिंग्स प्राथमिकता है।

आप जानते हैं कि सीमा रंग आप की जरूरत है, तो आप सिर्फ (उदाहरण) जोड़ सकते हैं:

self.segmentedControl.layer.borderColor = [UIColor whiteColor].CGColor; 
self.segmentedControl.layer.borderWidth = 1.0; 
+0

यह कोने त्रिज्या को कैसे बदलता है? –

+0

यह कोने त्रिज्या को नहीं बदलता है। यह अपेक्षित परिणाम प्राप्त करने के लिए प्रश्न में पोस्ट किए गए मूल कोड को पूरक करता है। –

1

निम्नलिखित कोड का उपयोग करें:

segmentContrl.layer.borderColor=*anycolor*.CGColor; 
segmentContrl.layer.cornerRadius = 0.0; 
segmentContrl.layer.borderWidth = 1.5f; 
+0

मेरे लिए काम नहीं किया – longbow

+0

यह आमतौर पर काम करेगा। अपना कोड प्रदान करें ताकि मैं इसमें देख सकूं! –

+0

मेरे लिए काम नहीं किया है न तो – iDev

31

UIView के अंदर UISegmentedControl एम्बेड करें और UIView के लिए कोने त्रिज्या सेट करें।

ऑब्जेक्टिव-सी

outerView.layer.cornerRadius = CGRectGetHeight(outerView.bounds)/2; 
outerView.layer.borderColor = [UIColor blueColor].CGColor; 
outerView.layer.borderWidth = 1; 

स्विफ्ट

outerView.layer.cornerRadius = CGRectGetHeight(outerView.bounds)/2 
outerView.layer.borderColor = UIColor.blueColor().CGColor 
outerView.layer.borderWidth = 1 

Cornered UISegmentedControl

+2

और स्टोरीबोर्ड – Ilario

+0

में क्लिप सबव्यूज को UIView में जोड़ना न भूलें यह सही समाधान है – Irfan

3

स्विफ्ट 3 & Xcode के लिए अपडेट किया गया 8.2 संगतता

mySegmentedControl.layer.cornerRadius = 25.0 
    mySegmentedControl.layer.borderColor = UIColor.white.cgColor 
    mySegmentedControl.layer.borderWidth = 1.0 
    mySegmentedControl.layer.masksToBounds = true 
2

पिछले समाधान मेरे लिए कभी काम नहीं किया। मेरा समाधान है:

पर्यवेक्षण के अंदर UISegmentedControl को एम्बेड करने के लिए, UISegmentedControl सीमा को काटने के लिए अग्रणी, पीछे, नीचे, शीर्ष बाधाओं को असाइन करें। अंत में पर्यवेक्षण को इस तरह से कॉन्फ़िगर किया जाना चाहिए:

segmentedControl.superview.clipsToBounds = true 
segmentedControl.superview.layer.cornerRadius = 0 //whatever 
segmentedControl.superview.layer.borderWidth = 1 
segmentedControl.superview.layer.borderColor = segmentedControl.tintColor.CGColor 
संबंधित मुद्दे